¿Qué es exactamente REST, RESTful?

Autor: Tan Ultra
enlace: https: //www.zhihu.com/question/28557115/answer/48094438
Fuente: saber casi con
derechos de autor del autor. Para reimpresiones comerciales, comuníquese con el autor para obtener autorización. Para reimpresiones no comerciales, indique la fuente.

Creo que el problema es muy bueno: REST - Transferencia directa de estado REpresentacional: transferencia de estado de la capa de presentación. Esta traducción literal al chino aparece a menudo en muchos blogs. Nima, ¿quién entiende "transferencia de estado de la capa de presentación"? ¿Es esto humano? Yo mismo he estado confundido durante mucho tiempo, y después de buscar mucha información, me tomó casi un año obtener una comprensión bastante clara. Comparte de la siguiente manera:

El resumen de una oración del maestro es muy incisivo:
URL localiza recursos y usa verbos HTTP (GET, POST, DELETE, DETC) para describir operaciones.

--- Versión concisa ---

0. REST no es la palabra "descanso", sino algunas abreviaturas de palabras. Pero incluso si se dicen esas pocas palabras, no puedo entender de qué estoy hablando -_- !! (no para menospreciar a las personas, es difícil para mí entenderme a mí mismo);
1. REST describe la interacción entre el cliente y el servidor en la red Forma; REST en sí no es práctico, lo que sí es práctico es cómo diseñar una API RESTful (interfaz de red estilo REST);
2. En la API RESTful proporcionada por Server, solo se usan sustantivos para especificar recursos en la URL, y en principio no se usan verbos. Los "recursos" son el núcleo de la arquitectura REST o todo el procesamiento de la red. Por ejemplo:
api.qc.com/v1/newsfeed: Obtén la frescura de alguien;
api.qc.com/v1/friends: Obtenga una lista de los amigos de alguien;
api.qc.com/v1/profile: Obtener información detallada de alguien 3. Use los verbos en el protocolo HTTP para agregar, modificar y eliminar recursos. Es decir, el estado de los recursos se invierte a través de los verbos HTTP:
GET se usa para obtener recursos,
POST se usa para crear nuevos recursos (y también se puede usar para actualizar recursos),
PUT se usa para actualizar recursos y
DELETE se usa para eliminar recursos. Por ejemplo:
BORRAR http://api.qc.com/v1/amigos: elimine el amigo de alguien (especifique la identificación del amigo en el parámetro http)
POST http://api.qc.com/v1/amigos: agregar amigos
ACTUALIZAR api.qc.com/v1/profile : actualizar información personal

Prohibido su uso: OBTENGA api.qc.com/v1/deleteFri 图例 :
& amp; amp; lt; img src = & quot; https: //pic1.zhimg.com/7405939b62a73f28846533de08db3a80_b.jpg" data-rawwidth = & quot; 1328 & quot; data-rawheight = & quot; 702 & quot; class = & quot; origin_image zh-lightbox-thumb & quot; ancho = & quot; 1328 & quot; data-original = & quot; https: //pic1.zhimg.com/7405939b62a73f28846533de08db3a80_r.jpg" & amp; amp; gt;

4. Se transfiere una representación de un determinado recurso entre el servidor y el cliente, como usar JSON, XML para transferir texto o usar JPG, WebP para transferir imágenes, etc. Por supuesto, también puede comprimir los datos durante la transmisión HTTP (compresión de datos en línea).
5. Utilice el código de estado HTTP para transmitir la información del estado del servidor. Por ejemplo, el 200 más utilizado significa éxito, 500 significa error interno del servidor, etc.

Ese es el mensaje principal. Finalmente, necesitamos liberar nuestras mentes. En lugar de usar la arquitectura típica PHP o JSP, el lado Web será reemplazado por renderizado de front-end y lógica comercial incidental (como algunos ejemplos de AngularJS o BackBone). La Web y el servidor solo utilizan la API definida anteriormente para transferir datos y cambiar el estado de los datos. El formato es generalmente JSON. Lo mismo se aplica a iOS y Android. Se puede ver que los desarrolladores web, iOS, Android y de terceros se han convertido en roles iguales para consumir de manera conjunta los servicios proporcionados por Server a través de un conjunto de API.


--- Versión detallada ---

Permítanme comenzar con el nombre
REST - Transferencia de estado representacional. En
primer lugar, la razón de la oscuridad es que se ha eliminado el tema anterior y el nombre completo es Transferencia de estado representacional de recursos: en términos sencillos, significa que los recursos se transfieren de una forma determinada en la red. Desglose:
Recurso: Recursos, es decir, datos (el núcleo de la red se mencionó anteriormente). Como noticias, amigos, etc .;
Representacional: cierta forma de representación, como JSON, XML, JPEG, etc .;
Transferencia de estado: cambio de estado. Mediante verbos HTTP.
La fuente de
la tesis de graduación de REST Roy Fielding. Este amigo participó en el diseño del protocolo HTTP y también es cofundador del proyecto Apache Web Server (desafortunadamente, ahora es el mundo de nginx). La escuela de posgrado de doctorado es UC Irvine, Irvine está en California, con abundante sol y hermosas playas, es una famosa zona rica. La sede de Oculus VR se encuentra aquí (gafas de realidad virtual, adquiridas por FB, el CTO es John Carmack, autor de Quake and Doom).
Todo el mundo sabe que los papeles son oscuros. Cuando estudiaba en CMU, muchos cursos organizaban dos revisiones de artículos por semana. En retrospectiva, cada vez que escribo una reseña de un artículo es mi momento más doloroso. La tesis doctoral de REST es sin duda más.
Dirección del artículo: Estilos arquitectónicos y diseño de arquitecturas de software basadas en red
DESCANSO 章节 : Disertación de campo: CAPÍTULO 5: Transferencia de estado representacional (REST)
Leí el capítulo REST por primera vez, pero no terminé de leer el artículo completo = _ =
& amp; amp; lt; img src = & quot; https: //pic3.zhimg.com/11cdfc60bde58e8545bafe42f0af79ca_b.jpg" data-rawwidth = & quot; 500 & quot; data -rawheight = & quot; 375 & quot; class = & quot; origin_image zh-lightbox-thumb & quot; width = & quot; 500 & quot; data-original = & quot; https: //pic3.zhimg.com/11cdfc60bde58e8545bafe42f0af79ca_r.jpg" & amp; amp; gt;

Lo que la API RESTful es
práctica es cómo comprender correctamente la arquitectura RESTful y diseñar la API RESTful.

¿Por qué utilizar la estructura RESTful en primer lugar?
Todo el mundo sabe que las páginas web "antiguas" son una combinación de front-end y back-end, como antes PHP y JSP. En la era del escritorio anterior, el problema no era grande, pero en los últimos años, con el desarrollo de Internet móvil, han surgido varios tipos de clientes uno tras otro. RESTful puede proporcionar servicios para la Web, iOS y Android a través de una interfaz unificada. Además, para la mayoría de las plataformas, como la plataforma Facebook, la plataforma abierta Weibo, la plataforma pública WeChat, etc., no necesitan tener un front-end explícito, solo necesitan un conjunto de interfaces de servicio, por lo que RESTful es su mejor opción. En arquitectura RESTful:
& amp; amp; lt; img src = & quot; https: //pic2.zhimg.com/06ee404783540f0af299042057738a99_b.jpg" data-rawwidth = & quot; 550 & quot; data-rawheight = & quot; 250 & quot; class = & quot; origin_image zh-caja de luz-thumb & quot; width = & quot; 550 & quot; datos originales = & quot; https: //pic2.zhimg.com/06ee404783540f0af299042057738a99_r.jpg" & amp; amp; gt;
? ¿Cómo se API del servidor diseñado para cumplir con los requisitos RESTful
primero de todo Estos son los puntos en la versión concisa. Además de algunas prácticas recomendadas complementarias:
1. URL raíz:
example.org/api/v1/ *
api.example.com/v1/ * 2. Control de versiones de API:
se puede colocar en la URL o encabezado HTTP:
/ api / v1 /
3. Use sustantivos en lugar de verbos en URI, y se recomiendan los plurales.
MALO
  • / getProducts
  • / listOrders
  • / retrieveClientByOrder? orderId = 1
BUENO
  • OBTENER / productos: devolverá la lista de todos los productos
  • POST / productos: agregará un producto a la colección
  • GET / products / 4: recuperará el producto # 4
  • PATCH / PUT / products / 4: actualizará el producto # 4

4. Asegúrese de que los métodos HEAD y GET sean seguros y no cambiarán el estado del recurso (contaminación). Por ejemplo, prohíba estrictamente las siguientes situaciones:
GET / deleteProduct? Id = 1
5. Se recomienda que la dirección del recurso utilice una estructura anidada. Por ejemplo:
GET / friends / 10375923 / profile
UPDATE / profile / primaryAddress / city 6. Tenga cuidado con el tamaño del resultado devuelto. Si es demasiado grande, la paginación o el límite deben agregarse a tiempo. El protocolo HTTP admite la operación de paginación, solo use el enlace en el encabezado.
7. Utilice el código de estado HTTP correcto para indicar el estado de acceso: HTTP / 1.1: Definiciones del código de estado
8. Use texto claro y fácil de entender (Cadena. Tenga en cuenta que el error devuelto es para que la gente lo vea, evite usar mensajes de error 1001) y agregue comentarios de manera apropiada.
9. Acerca de la seguridad: use https para su propia interfaz, agregue una clave para hacer un hash y colóquelo al final. Teniendo en cuenta las condiciones nacionales, HTTPS es inestable en las redes inalámbricas, y toda la carga útil HTTP se puede cifrar mediante métodos de cifrado de nivel de aplicación. Los amigos que estén interesados ​​pueden usar sus teléfonos móviles para conectarse al Wi-Fi compartido de la computadora y luego usar Charles para escuchar las solicitudes de la red WeChat (publicar fotos o escanear Momentos).
Si se trata de una API de plataforma, puede usar OAuth2 maduro pero complicado, artículo de Sina Weibo: Descripción del mecanismo de autorización

La implementación específica de cada extremo
Como se muestra en la figura anterior, el servidor proporciona un conjunto de API RESTful de manera uniforme, web + ios + android llama a la API como ciudadanos equivalentes. Hasta ahora, cada extremo ha desarrollado un marco relativamente maduro para ayudar a los desarrolladores a obtener el doble de resultados con la mitad del esfuerzo.

- Servidor -
Recomendado: Spring MVC o Jersey o
Tutorial de Play Framework :
Introducción · Creación de un servicio web RESTful

- Android -
Recomendado: RetroFit ( Retrofit) O Volley ( mcxiaoke / android-volley · GitHubEl bloqueo oficial de Google no está publicado)
Tutorial:
Retrofit โ € "Comenzar y crear un cliente de Android
Actualización de la red de la serie de desarrollo rápido de Android

- iOS -
Recomendado: RestKit ( RestKit / RestKit · GitHub)
教程 :
Desarrollo de aplicaciones iOS RESTful con RestKit

- Web - ¡Se
recomienda hacerlo de forma casual! Puede usar el pesado AngularJS, o puede usar el liviano Backbone + jQuery.
Tutorial: blog.javachen.com/2015/ 01/06

参考 :
[1]: Algunas prácticas recomendadas de REST
[2]: API de GitHub v3
[3]: tlhunter / consumer-centric-api-design · GitHub

Finalmente, hay un huevo:
Facebook Billiards Performance: Billiards 1 — Juega en línea

Supongo que te gusta

Origin blog.csdn.net/Qianliwind/article/details/75042251
Recomendado
Clasificación