Monday, November 25, 2024

Diseño de un servicio REST

Sesión 3: 2h31m

Diseño del contrato

  • Identificador de recursos
    • http://localhost/api/authors
  • Método HTTP
    • https://datatracker.ietf.org/doc/html/rfc9110 
  • Payload (Representación: media types)
    • Por convención se usa JSON

Lineamientos para el nombramiento de recursos

  • Sustantivos: cosas, no acciones
    • api/getauthors
    • GET api/authors
    • GEt api/authors/{authorId}
  • Transmitir significado al elegir sustantivos
  • Seguir el principio para la predictibilidad
    • api/something/somethingelse/authors
    • api/authors
    • api/id/authors
    • api/authors/{authorId}
  • Representar la jerarquía al nombrar recursos
    • api/authors/{authorId}/books
    • api/authors/{authorId}/books/{bookId}
  • Filters, sorting orders, ... no son recurso
    • api/authors/orderby/name
    • api/authors?orderby=name
  • A veces las llamadas al estilo RPC no se asignan fácilmente a nombres de recursos pluralizados
    • api/authors/{authorId}/pagetotals
    • api/authorpagetotals/{id}
    • api/authors/{authorId}/totalamountofpages

Interactuar con recursos a través de métodos HTTP



La importancia de los códigos de estado

  • Los código de estado indican al consumidor
    • Si la solicitud funcionó o no como se esperaba
    • ¿Quién es responsable de una solicitud fallida?
  • Ser lo más específico posible
    • Los consumidores de API suele ser no humanos
    • Ser especialmente específico en lo que respecta a informar quién/qué es responsable de un error.






Formateadores y Negociación de Contenido

  • Output formatter
    • Se ocupa del tipo de salida. Media type: Accept header
  • Input formatter
    • Se ocupa del tipo de entrada. Media type: Content-type header


Modelo externo frente al modelo de entidad

  • El modelo de entidad representa las filas de la base de datos como objetos
  • El modelo externior representa lo que se envía a través del servicio

  • La separación de los modelos externos y de entidad conduce a un código más robusto, confiable y evolutivo.

No comments:

Post a Comment

Cuando el código funciona, pero no tiene tests: ¿y ahora qué?

Seguramente te ha pasado alguna vez. Te dan acceso al repositorio de un nuevo proyecto. Lo abres con curiosidad, esperas encontrar una estru...