tutorial seguridad por example español autenticacion json api rest http query-string

json - seguridad - Mejores prácticas de REST API: args en cadena de consulta frente a cuerpo de solicitud



web api rest c# (3)

Una API REST puede tener argumentos en varios lugares:

  1. En el cuerpo de solicitud : como parte de un cuerpo json u otro tipo MIME
  2. En la cadena de consulta , p. Ej., /api/resource?p1=v1&p2=v2
  3. Como parte de la ruta URL , p. Ej. /api/resource/v1/v2

¿Cuáles son las mejores prácticas y consideraciones para elegir entre 1 y 2 arriba?
2 vs 3 está cubierto here .


¿Cuáles son las mejores prácticas y consideraciones para elegir entre 1 y 2 arriba?

Por lo general, el cuerpo del contenido se utiliza para los datos que se cargarán / descargarán al / del servidor y los parámetros de consulta se utilizan para especificar los datos exactos solicitados. Por ejemplo, cuando sube un archivo, especifica el nombre, tipo de mímica, etc. en el cuerpo, pero cuando busca una lista de archivos, puede usar los parámetros de consulta para filtrar la lista por alguna propiedad de los archivos. En general, los parámetros de consulta son propiedad de la consulta, no de los datos.

Por supuesto, esta no es una regla estricta: puede implementarla de la manera que le parezca más apropiada / adecuada para usted.

También puede consultar el artículo de Wikipedia sobre cadena de consulta , especialmente los dos primeros párrafos.


Asumiré que estás hablando de solicitudes POST / PUT. Semánticamente, el cuerpo de la solicitud debe contener los datos que está publicando o parcheando.

La cadena de consulta, como parte de la URL (un URI), está allí para identificar qué recurso está publicando o aplicando parches.

Usted solicitó las mejores prácticas, después de que la semántica es mía. Por supuesto, el uso de sus reglas empíricas debería funcionar, especialmente si el marco web que utiliza lo abstrae en parámetros .

Usted más sabe:

  • Algunos servidores web tienen límites en la longitud del URI.
  • Puede enviar parámetros dentro del cuerpo de la solicitud con CURL.
  • A dónde envíe los datos no debería tener efecto sobre la depuración.

Las siguientes son mis reglas generales ...

Cuándo usar el cuerpo:

  • Cuando los argumentos no tienen una clave plana: estructura de valores
  • Si los valores no son legibles por humanos, como datos binarios serializados
  • Cuando tienes una gran cantidad de argumentos

Cuándo usar la cadena de consulta:

  • Cuando los argumentos son tales que desea verlos durante la depuración
  • Cuando desee poder llamarlos manualmente mientras desarrolla el código, por ejemplo, con curl
  • Cuando los argumentos son comunes en muchos servicios web
  • Cuando ya está enviando un tipo de contenido diferente, como application/octet-stream

Observe que puede mezclar y combinar: coloque los comunes, los que deberían ser debugibles en la cadena de consulta, y arroje todo el resto en el json.