Naming Conventions para URIs - MatiasEspinozaQ/BuffetAPI GitHub Wiki

La representación de data en REST se llama Resource, y se usa para tener una naming convention consistente. Esto tendrá el beneficio de que sea mucho más fácil trabajar con la API y el proyecto estará más ordenado que siempre es un beneficio al momento de hacer debuging o manutención.


Convenciones varias

  • Usar / para definir jerarquía
  • No terminar las URL con /
  • Separar palabras con guiones '-'. Por ejemplo, 'user-admin' en vez de 'UserAdmin'
  • No usar guion bajo '_' . Algunos navegadores los esconden y puede generar errores a veces.
  • Usar minúsculas siempre para mantener consistencia
  • No usar la extensión de los archivos como .xml

Que es un Resource

Cualquier información que puede ser nombrada (un servicio, un documento, una imagen, una persona)

En general, hay que usar sustantivos, excepto en casos especificos como los controladores

The key abstraction of information in REST is a resource. Any information that can be named can be a resource: a document or image, a temporal service (e.g. “today’s weather in Los Angeles”), a collection of other resources, a non-virtual object (e.g., a person), and so on. In other words, any concept that might be the target of an author’s hypertext reference must fit within the definition of a resource. A resource is a conceptual mapping to a set of entities, not the entity that corresponds to the mapping at any particular point in time.


Arquetipos de Resource

Los Resources se pueden clasificar en distintos arquetipos para clasificarlos y, además, no hacer que un resource haga demasiado.

Si un resource clasifica como más de uno a la vez, probablemente se debería separar en dos separados.

Collection

  • Es un directorio de recursos, por ejemplo, una lista de objetos o filas en una tabla. Usar prural

domain/resource/collection

domain.com/user-admin/users

Document

  • Un objeto único, similar a una instancia de un objeto o una fila en una tabla. Se pueden visualizar como un objeto dentro de una colección o no. Usar singular

domain/resource/collection/document

domain.com/user-admin/users

Store

  • Es un repositorio de recursos que maneja el cliente. Es para cosas que el cliente le hace CRUD a los registros. Usar plural

domain/resource/collection/document/store

domain.com/user-admin/users/{user_id}/services

Controller

  • Es una acción, como un método con argumentos y salidas. No usar tanto, se prefiere el uso de HTTP Request Methods, pero para otras funcionalidades se puede usar este arquetipo Usar verbos

domain/resource/collection/controller

domain.com/user-admin/users/{user_id}/delete


No Utilizar acciones CRUD en URIs

No utilizar palabras como create o update en nombres de URI, estas solo deben identificar resources, no las acciones que se les hace.

Para hacer eso se usan HTTP request methos como GET, POST, PUT or DELETE

Por ejemplo

  • HTTP GET initial-d.jaramillo.cl/users/{id} // Consigue la info de un usuario (READ)

  • HTTP PUT initial-d.jaramillo.cl/users/{id} // Actualiza la info de un usuario (UPDATE)

  • HTTP DELETE initial-d.jaramillo.cl/users/{id} // Elimina a un usuario (DELETE)

  • HTTP POST initial-d.jaramillo.cl/users // Agrega un nuevo usuario (INSERT)

Los datos para hacer las acciones se guardan en el HEADER de la request, usualmente en un formulario o un json

Cuando Usar Composición

Solo usar composición para ordenar, paginar, filtrar o acciones similares

La composición se le llama a cuando se usan ? para poner argumentos, por ejemplo

  • initial-d.jaramillo.cl/users?user-type=Cajero