Material bélico
Pocas tecnologĂas en la historia de la TI han generado tanta controversia como REST. Lo más sorprendente es que las partes contendientes, por regla general, no tienen ni idea del tema de la disputa.
Empecemos desde el principio. Roy Fielding, coautor de las especificaciones HTTP y URI, completĂł su doctorado en Estilos arquitectĂłnicos y diseño de arquitectura de software de red en 2000, cuyo quinto capĂtulo se titulĂł Transferencia de estado representacional (REST). La disertaciĂłn está disponible aquĂ .
Como puede ver fácilmente en este capĂtulo, es una descripciĂłn general bastante abstracta de una arquitectura de red distribuida que no está ligada a HTTP o URL en absoluto. Además, no se trata en absoluto de reglas de diseño de API; En este capĂtulo, Fielding enumera metĂłdicamente las limitaciones que enfrenta un desarrollador de software de red distribuida. AquĂ están:
- el cliente y el servidor no conocen la estructura interna del otro (arquitectura cliente-servidor);
- la sesión se almacena en el cliente (diseño sin estado);
- los datos deben marcarse como almacenables en caché o no almacenables en caché;
- las interfaces de interacciĂłn deberĂan estar estandarizadas;
- Los sistemas de red son de varias capas, es decir el servidor solo puede ser un proxy para otros servidores;
- la funcionalidad del cliente se puede ampliar proporcionando el cĂłdigo desde el servidor.
Eso es todo, la definiciĂłn de REST termina ahĂ. Además, Fielding concretiza algunos aspectos de la implementaciĂłn de sistemas en las restricciones especificadas, pero todos son completamente abstractos de la misma manera. Literalmente: “la abstracciĂłn de informaciĂłn clave en REST es un recurso; cualquier informaciĂłn que se pueda nombrar puede ser un recurso ".
La conclusiĂłn clave de la definiciĂłn de REST de Fielding es en realidad la siguiente: cualquier software de red en el mundo sigue los principios de REST , con muy, muy raras excepciones.
En efecto:
- es muy difĂcil imaginar un sistema en el que no habrĂa al menos alguna interfaz de interacciĂłn estandarizada, de lo contrario, simplemente será imposible desarrollarlo;
- , , , , ;
- — , , ;
- , - - ;
- , code-on-demand , , , «» , — .
, , , . , , REST . , , code-on-demand — , . S («stateless»), , , . (, , : « … , - ».)
- REST API ;
- REST API , ; ;
- REST API , .
, REST , , - REST API, API, , API.
, , , REST -2008.
REST
, ; : , ( ), . REST HTTP URL «RESTful API», .
, REST ? . , , , .
, , API - , - «» API. , 2000 , , .
«» REST- API (, )? , — .
REST , : , , ( RESTful- !).
HTTP : , , :
- URL , - ;
- , ; — , ( ), - , ;
- , ; , , ;
- , , , , .
, , — .
? ( ) . - , ; API , , , API . (, HTTP-) , , , , ; , , , -, , . HTTP-, , . - , — .
( , , . , Accept-Encoding Content-Length .)
, REST-, . stateless-: , .
. . . , :
// GET /me Cookie: session_id=< > // GET /delete-me Cookie: session_id=< >
?
- ; /me , ; , .
- , .. ; .
, , , URL:
// GET /me?session_id=< > // GET /delete-me?session_id=< >
, ( , ), :
- URL , ; , , .. URL .
- . , , , - .
REST? :
// GET /user/{user_id} Authorization: Bearer <token> // DELETE /user/{user_id} Authorization: Bearer <token>
URL , , ; , .. . DELETE-; , Authorization .
, : -, , Authorization (, , ). , , . , : , , , URL, , , GET /user/{user_id}/public-profile
— /public-profile
URL, . REST.
. , DELETE /user/{user_id}
. ?
1. HTML- , -, , , . - . , - — , - 200 — , , .
2. - HTTP-, , 504, , , , - , , . , , — , 504.
3. , , DELETE
, ; — 1 2. , ( , DELETE
), : . «» - , .
, (3) , (1) (2): . , , ; (3) (1) (2): . , , . , , ( , ) .
, ( ) : - «», , . - — , , .
, , . -, , - , .
/ / HTTP, . , -, . -, . , , , - .
, « REST API», , , :
« URL , » — , - . URL :
- URL ;
- , URL — , .
« HTTP- , » — . , (), (), () ; , , - — , . : ,
DELETE /list?element_index=3
, .. ,DELETE
;
«
POST
,GET
,PUT
,PATCH
DELETE
» — , « » , . , , - - «» «»:
-
GET
API , ;Cache-Control
no-cache
—POST
; , - ; - , —
PUT
(, ); -
PATCH
,PUT
; - , — ,
PUT /archive?entity_id
.
-
« » — , , .
« », « URL» , REST.
, REST API:
- HTTP, , .
- URL .
- , URL (, , query-), .
- HTTP- API , , : , .
REST
, REST — , , API-, - — , , , , — - . , , , REST .
REST , , API-, - — , , , , — . , HTTP , REST — , — , . - .
REST — : , — . , .
REST
- REST -2008, , , HATEOAS. , , : , , , , . , , , API , , .
, , API . , ; — . API , , ( ) . , , API , , API - .
, - , API , , .
--
Este es un borrador para un capĂtulo futuro del libro sobre desarrollo de API. El trabajo se realiza en Github . La versiĂłn en inglĂ©s del mismo capĂtulo se publica en medium . Le agradecerĂa si pudiera compartirlo en reddit; yo mismo no puedo segĂşn la polĂtica de la plataforma.