Varios de los desarrolladores aquí están teniendo un amistoso (algunos dirían religiosa) discusión sobre si una petición GET de una API REST debe devolver el ID del recurso solicitado. Vamos a suponer que la solicitud GET siguiente:¿Debe una respuesta RESTful GET devolver el ID de un recurso?
http://my.api.com/rest/users/23
Este retorno es actualmente:
{"name": "Jim", "age": 40, "favoriteColor": "blue"}
Tenga en cuenta que "id" no se encuentra en el conjunto de resultados.
Básicamente hay 4 campos que luchan con este problema.
CAMP # 1: Cuando los llamadores hacen la solicitud GET, ya conocen la ID. Por lo tanto, el conjunto de resultados debe incluir ID. Si las personas que llaman necesitan esta información para habilitar la edición de UI, las personas que llaman deben pasar el ID 23, quizás añadiendo el miembro {"id": 23} al JSON manualmente.
Las personas en el Campamento # 1 también argumentan que la presencia de la ID en el conjunto de resultados indicaría que este valor puede modificarse, lo que por supuesto no puede.
CAMP # 2: Sin la identificación, el conjunto de resultados JSON no se puede utilizar de forma nativa para las operaciones de edición/actualización en formularios de interfaz de usuario. En cambio, el mecanismo de devolución de llamada de AJAX debe ser responsable de pasar los campos de ID y agregarlos manualmente al conjunto de resultados. Esto parece klunky y propenso a errores. Los chicos de UI están argumentando que el conjunto de resultados "siente" que faltan datos que deberían estar presentes, es decir, la ID.
CAMP # 3: Estas personas están preocupadas por la consistencia. Si alguna vez tenemos una colección de objetos de usuario devueltos por una API, estos objetos DEBEN incluir la ID. Por lo tanto, para mayor coherencia, la versión singleton de un GET también debe incluir el ID.
CAMP # 4: Estas personas sugieren que la solicitud GET para un usuario podría devolver metadatos en forma de HyperMedia o SelfLinks que incluirían la ID.
Esto no es un esoterismo "¿Quién tiene la razón?" argumento, tampoco. El enfoque que tomemos dictará la forma de nuestra API y afectará la carga de trabajo de varios desarrolladores durante las nuevas semanas.
Es solo una opinión personal, pero estoy de acuerdo con los campos 2 y 3. Creo que la representación debe contener todos los datos disponibles, identificación incluida. Particularmente cuando es una identificación natural. Esta es una pregunta muy interesante, pero dudo que encuentres una respuesta simple. – toniedzwiedz
Desde la perspectiva del cliente, el URI utilizado en el GET * es * el ID. Yo votaría por el Campamento 4, suponiendo que la "ID" utilizada en el autoenlace es el URI completo, no solo la parte al final. –
La gente en el Campamento 4 se sentirá aliviada al ver que no están solos. Y para confirmar, si incluyesen la ID, estaría integrada dentro de un URI completo. Esto significa que será necesario analizar el URI para extraer la ID, pero para la gente de Camp 2 al menos no tienen que cargar manualmente la carga JSON. Por otro lado, los seguidores del Campamento 1 argumentan que un URI de este tipo sería solo una implementación parcial del Nivel 3 de REST, por esta razón no les gustan los SelfLinks integrados. –