Slik lager du et REST-basert API i JavaScript på 3 minutter

APIer er sentrale i utviklingen av webapplikasjoner. Det kan virke ganske vanskelig å lage et API fra bunnen av, men det kan faktisk være ganske enkelt dersom du tar utgangspunkt i kjent og kjær webteknologi. I denne artikkelen vil jeg vise deg hvordan du kan lage et API på bare tre minutter.

Dette trenger du før du starter: en terminal, en instans av mongodb og npm installert i ditt miljø.

Det første minuttet

La oss begynne med å initiere et nytt node-prosjekt. Lag en mappe prosjektet kan ligge i og skriv npm init. Du trenger følgende npm-pakker: express, mongoose og body-parser. De installerer du enkelt slik:

npm install --save express mongoose body-parser

Dernest trenger du en index.js som vi kan lage med vi eller en annen editor hvis du er komfortabel med.

Nå kan du selvfølgelig starte mongodb og taste inn litt data selv, men la oss spare oss litt tid og heller importere et lite sett med REST-data som du importerer med følgende kommando:

mongoimport --host localhost --db restapi  --collection cities < zips.json

Dette datasettet finner du på mongodb.org. Jeg bruker bare et lite utsnitt av datasettet, og det finner du her.

Det andre minuttet

Rediger index.js og legg inn følgende:


'use strict';
var express = require('express');
var bodyparser = require('body-parser');
var mongoose = require('mongoose');
var app = express();
mongoose.connect(process.env.MONGOLAB_URI || 'mongodb://localhost/restapi/cities');

Dette er init-delen av API-et. Dernest lager vi databaseskjemaet:


var dbSchema = new mongoose.Schema({
city: String,
loc: {
  type: [Number],
  index: '2dsphere'
},
  pop: Number,
  state: String
});		
var cities = mongoose.model('cities', dbSchema);

Deretter rutene:


var routes = function (app) {
app.use(bodyparser.json());

app.get('/city', function (req, res) {
  cities.find({}, function (err, data) {
  res.json(data);
  });
});

app.delete('/city/:name', function (req, res) {
cities.remove({
  city: req.params.name
  }, function (err) {
  res.json(req.body);
  });
});
}
var router = express.Router();
routes(router);
app.use('/api/v1', router);

Og til sist starter vi express:


app.listen(process.env.PORT || 3000, function () 
{
  console.log('server listening on port ' + 
  (process.env.PORT || 3000));
});

Det tredje minuttet

API-et er nå klart, og vi kan starte det med:

node index.js

Du kan teste responsen på en GET ved å sende følgende kommando:

http localhost:3000/api/v1/city

(her bruker jeg HTTPie, men du kan også bruke CURL eller et browserbasert REST-grensesnitt).

Siden du har definert en DELETE kommando også, kan du teste den ved å kjøre følgende:

 http DELETE localhost:3000/api/v1/city/TOLLAND

Kjører du så en ny GET vil du se byen er forsvunnet fra databasen.

Neste skritt kan nå være å definere flere REST-parametre, legge på sikkerhet og publisere APIet på en server som kan nås fra nettet.

Kildekoden til dette prosjektet er tilgjengelig her: https://github.com/svenanders/rest-express, og du kan teste API-kallene på følgende adresse: https://arcane-reef-4544.herokuapp.com/api/v1/city.