Goodybag
We pretty much just write {code} all day.
We of course wrote the
Goodybag API - which powers:
- Our Loyalty Platform
- Our Consumer and Business web interface
- Our Mobile Application
- Tons of other stuff too
We pretty much just write {code} all day.
We of course wrote the
Goodybag API - which powers:
Hold on to your beers. We're about to find out.
At Goodybag, we chose Node.js and MongoDb
Node is a V8 powered Javascript framework designed for writing event-driven and network based applications.
V8 is just Google's Javascript engine.
We want to consume JSON requests and return data in a JSON format as well
register (alias, email, password, name, url)login (alias, password)get (alias)follow (alias, followee_alias)get (id)list (alias)add (alias, message)list (alias)addTweet (alias, message)[POST] - api.mini-twitter.com/v1/users/register[POST] - api.mini-twitter.com/v1/users/login[GET] - api.mini-twitter.com/v1/users/:alias[POST] - api.mini-twitter.com/v1/relationships/follow[POST] - api.mini-twitter.com/v1/tweets[GET] - api.mini-twitter.com/v1/tweets{?alias=:alias}[GET] - api.mini-twitter.com/v1/tweets/:id[GET] - api.mini-twitter.com/v1/tweets/stream
var express = require('express')
, mongojs = require('mongojs')
, sanitize = require('./middleware/sanitize')
, users = require('./routes/users')
, tweets = require('./routes/tweets')
, streams = require('./routes/streams')
, app = express.createServer();
mongojs.connect(process.env['MONGO_URL']);
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'secret'}));
app.use(express.methodOverride());
app.post('/v1/users/register', sanitize, users.register);
app.post('/v1/users/login', sanitize, users.login);
app.get('/v1/users/:alias', sanitize, users.get);
app.post('/v1/relationships/follow', auth.check, sanitize, users.follow);
app.post('/v1/tweets', auth.check, sanitize, tweets.add);
app.get('/v1/tweets', sanitize, tweets.list);
app.get('/v1/tweets/:id', sanitize, tweets.get);
app.get('/v1/tweets/stream', auth.check, sanitize, streams.list);
app.listen(parseInt(process.env['PORT_WWW']));
// users.js
var api = require('./api')
, routes = module.exports;
routes.register = function (req, res) {
api.users.register(req.body, function(err)){
if (err) {
res.send(err.message, 500);
return;
}
res.send(200);
}
}
// api/users.js
...
op.add = function (data, callback) {
var user = {
email: data.email
, password: data.password
, alias: data.alias
, name: data.name
};
db.users.schema.validate.add(user), function(err){
if (err) callback(errs.SCHEMA_VALIDATION_ERROR);
else db.users.collection.insert(, { safe: true }, callback || noop);
});
};
...
You've built a platform for succinct communication.
Now you can:
Each system will have its own set of challenges. It's important that you identify them and address them head on.
Twitter has TONS of users. So when Justin Bieber tweets, All hell breaks loose.
Twitter has obviously optimized for the Bieber Case.
Keeping these things in mind we thought hard about our technologies and setting up our architecture.