Skip to content

Instantly share code, notes, and snippets.

@Bryan-Herrera-DEV
Created March 24, 2022 16:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Bryan-Herrera-DEV/0a22e572bc9f36b7bb62f75cd55cb0ba to your computer and use it in GitHub Desktop.
Save Bryan-Herrera-DEV/0a22e572bc9f36b7bb62f75cd55cb0ba to your computer and use it in GitHub Desktop.
Mejores prácticas para el diseño de la API REST

Mejores prácticas para el diseño de la API REST

Aceptar y responder con JSON

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(bodyParser.json());

app.post('/', (req, res) => {
  res.json(req.body);
});

app.listen(3000, () => console.log('server started'));

Utilizar nombres en lugar de verbos en las rutas de los puntos finales

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(bodyParser.json());

app.get('/articles', (req, res) => {
  const articles = [];
  res.json(articles);
});

app.post('/articles', (req, res) => {
  res.json(req.body);
});

app.put('/articles/:id', (req, res) => {
  const { id } = req.params;
  res.json(req.body);
});

app.delete('/articles/:id', (req, res) => {
  const { id } = req.params;
  res.json({ deleted: id });
});

app.listen(3000, () => console.log('server started'));

Utilizar la anidación lógica en los puntos finales

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(bodyParser.json());

app.get('/articles/:articleId/comments', (req, res) => {
  const { articleId } = req.params;
  const comments = [];
  res.json(comments);
});


app.listen(3000, () => console.log('server started'));

Manejar los errores con elegancia y devolver los códigos de error estándar

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

const users = [
  { email: 'abc@foo.com' }
]

app.use(bodyParser.json());

app.post('/users', (req, res) => {
  const { email } = req.body;
  const userExists = users.find(u => u.email === email);
  if (userExists) {
    return res.status(400).json({ error: 'User already exists' })
  }
  res.json(req.body);
});


app.listen(3000, () => console.log('server started'));

Permitir el filtrado, la clasificación y la paginación

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

// employees data in a database
const employees = [
  { firstName: 'Jane', lastName: 'Smith', age: 20 },
  //...
  { firstName: 'John', lastName: 'Smith', age: 30 },
  { firstName: 'Mary', lastName: 'Green', age: 50 },
]

app.use(bodyParser.json());

app.get('/employees', (req, res) => {
  const { firstName, lastName, age } = req.query;
  let results = [...employees];
  if (firstName) {
    results = results.filter(r => r.firstName === firstName);
  }

  if (lastName) {
    results = results.filter(r => r.lastName === lastName);
  }

  if (age) {
    results = results.filter(r => +r.age === +age);
  }
  res.json(results);
});

app.listen(3000, () => console.log('server started'));

Datos en caché para mejorar el rendimiento

const express = require('express');
const bodyParser = require('body-parser');
const apicache = require('apicache');
const app = express();
let cache = apicache.middleware;
app.use(cache('5 minutes'));

const employees = [
  { firstName: 'Jane', lastName: 'Smith', age: 20 },
  //...
  { firstName: 'John', lastName: 'Smith', age: 30 },
  { firstName: 'Mary', lastName: 'Green', age: 50 },
]

app.use(bodyParser.json());

app.get('/employees', (req, res) => {
  res.json(employees);
});

app.listen(3000, () => console.log('server started'));

Versionar nuestras APIs

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());

app.get('/v1/employees', (req, res) => {
  const employees = [];
  res.json(employees);
});

app.get('/v2/employees', (req, res) => {
  const employees = [];
  res.json(employees);
});

app.listen(3000, () => console.log('server started'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment