La bitácora de un Ñu

GNU/Linux, software libre, programación y servidores

Creando APIs RESTful con buenas prácticas

Protocolo HTTP

El protocolo HTTP es una norma que describe como realizar una comunicación entre dos dispositivos para enviar y recibir información.

El cliente envía una petición y el servidor entrega una respuesta.

Para realizar una petición a un servidor, se requiere del método de la petición (verbo), de dónde se va realizar la petición y la versión del protocolo HTTP:

GET /index.html HTTP/1.1

Al realizar una petición, el servidor entrega una respuesta con la versión del protocolo HTTP solicitada, el código de respuesta y una breve descripción del código de respuesta:

HTTP/1.1 200 OK

APIs RESTful

Las APIs RESTful (representational state tranfer) representan información.

Características:

Métodos HTTP

Idempotencia

Es la propiedad de cambiar o no cambiar información.

Cambia la información sobre el método:

No cambia la información sobre los métodos:

Códigos de respuesta

Es la manera de indentificar la respuesta del servidor en base a la petición que se está realizando.

JWT

JSON Web Tokens, es un estándar para entregar credenciales de acceso.

Partes:

Ejemplos de respuestas de una API

"message": {
    type: "message",
    code: 200,
    description: "OK"
},
"data": {
    id: 8,
    name: "Ricardo",
    lastName: "García",
    age: 23
}
"message": {
    type: "error",
    code: 404,
    description: "No se encontró el usuario que está solicitando"
},
data: []

Parámetros

Se utilizan generalmente para enviar información que permita filtrar búsquedas.

Se representan por clave = valor

Por ejemplo:

https://tudominio.com:8080/api/v1/users?limite=5&pagina=5

?limite=5 o ?limite=5&pagina=5, todos los parámetros que se requieran se separan por el símbolo ampersand (&).

CORS

Es una protección que tienen los navegadores para que los usuarios no sean atacados con información proveniente de otros dominios diferentes al dominio de petición original.

Desde el backend con el método OPTIONS,se define a que dominios el cliente solamente puede realizar peticiones a una API.

HATEOAS

Por ejemplo:

"message": {
    type: "message",
    code: 200,
    description: "OK"
},
"data": {
    id: 8,
    name: "Ricardo",
    lastName: "García",
    age: 23
},
"navegation": [
    {
        "description": "self",
        "link": "/api/v1/users/8"
    },
    {
        "description:" "resource",
        "link": "/api/v1/users"
    }
]

Referencias