api rest search http-headers x-http-method-override

api - La solicitud REST no se puede codificar para GET(URL demasiado larga)



search http-headers (3)

Ejemplo:

Problema: el término de búsqueda puede ser tan largo que rompa la longitud máxima de la URL del servidor web.

¿Cómo permito términos de búsqueda extremadamente largos y sigo siendo RESTful?


Es un mal olor si su consulta puede ser tan larga que exceda la longitud máxima (de facto para los navegadores es de 2000 caracteres, pero puede ser mayor para otros medios de acceso a las API REST).

Si el usuario puede pasar tantos datos, debe ir en el cuerpo de solicitud / campo de datos, no en la URL.


Para inspirarme, solo miré la API v2 de Google Translate , que es "usar el estilo de llamada RESTful".

Naturalmente, los textos a traducir pueden ser bastante largos. Y así, Google opcionalmente permite enviar una solicitud con POST , pero con un giro:

Para usar POST , debe usar el encabezado X-HTTP-Method-Override para indicar a la API de traducción que trate la solicitud como un GET (use X-HTTP-Method-Override: GET ).

Por lo tanto, es posible transformar semánticamente una solicitud POST en una solicitud GET .

(Este descubrimiento me llevó a agregar la etiqueta x-http-method-override a mi pregunta).


REST no restringe POST a la creación. Tenga cuidado al asignar CRUD a los métodos HTTP y suponga que es REST. POST es el método utilizado para cualquier acción que no esté estandarizada por HTTP.

Dado que el estándar no establece un límite para los URI, esto se puede considerar una implementación rota, y está bien arreglarlo. Siempre y cuando la solución alternativa esté acoplada de manera flexible a su API, todavía estará REST. Esto significa que su API no debe implementar una traducción o anular directamente, sino en un preprocesador de algún tipo que reescribe la solicitud correctamente. Debería estar claramente documentado en algún lugar que esto se deba a una implementación defectuosa, y espera que eventualmente se vuelva obsoleta.