La web funciona sobre HTTP (*HyperText Transfer Protocol*), un protocolo de aplicación cliente-servidor sobre TCP: el cliente envía una petición con formato definido y el servidor responde con una respuesta con otro formato igualmente definido. Todo servidor web de este módulo se dedica, en el fondo, a leer peticiones y escribir respuestas con ese formato.
GET /books/42 HTTP/1.1 Host: localhost:8080 Accept: application/json Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
Nombre: valor (una por línea) con información sobre la petición.GET).Content-Type.
Un POST que crea un libro incluye cuerpo:
POST /books HTTP/1.1
Host: localhost:8080
Content-Type: application/json
Content-Length: 47
{"title":"Código limpio","author":"R. Martin"}
El método expresa la intención del cliente sobre el recurso que identifica la ruta:
| Método | Intención |
|---|---|
GET | Leer el recurso; no modifica nada |
POST | Crear un recurso (o ejecutar una operación) |
PUT | Reemplazar un recurso existente |
DELETE | Eliminar un recurso |
| Cabecera | Qué indica |
|---|---|
Host | Servidor y puerto solicitados (obligatoria en HTTP/1.1) |
Accept | Formatos que el cliente entiende |
Content-Type | Formato del cuerpo (en petición y respuesta) |
Content-Length | Tamaño del cuerpo en bytes |
Authorization | Credenciales: con tokens, Bearer <token> |
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 33
{"id":42,"title":"Código limpio"}
Content-Type, Content-Length…Content-Type.El código de estado resume el resultado; su primera cifra indica la familia:
| Código | Significado |
|---|---|
200 | OK: petición atendida |
201 | Recurso creado |
204 | Éxito sin cuerpo |
301 | Redirección permanente |
400 | Petición mal formada |
401 | No autenticado: falta el token o no es válido |
403 | Autenticado, pero sin permiso |
404 | No encontrado |
405 | Método no admitido en esa ruta |
500 | Error interno del servidor |
curl envía la petición y muestra la respuesta; con -v (*verbose*) muestra ambas tal cual cruzan la red:
$ curl -v http://localhost:8080/books/42
> GET /books/42 HTTP/1.1
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json
< Content-Length: 33
<
{"id":42,"title":"Código limpio"}
> son lo que envía el cliente (la petición).< son lo que responde el servidor (la respuesta).