¿Qué tan discreta debe ser una API RESTful?

12

Nunca he construido una API RESTful antes y me pregunto qué tan discreta debería ser.

Por ejemplo, supongamos que tengo un cliente que tiene un nombre, dirección, número de teléfono, dirección de correo electrónico, idioma, etc.

¿Tiene sentido que haya una manera de actualizar cada campo individual (dirección de actualización, dirección de correo electrónico de actualización, etc.), o debería haber una única actualización para todo el cliente y cada campo es opcional?

satur9nine
fuente
3
¿Qué parte de REST quieres? Si solo necesita una API simple sin preocuparse por los estándares, puede manejarla como la respuesta aceptada de thorsten müller. Si desea un DESCANSO real, debe buscar Roy Fielding (+ disertación, por ejemplo). Es el inventor de REST. Verá que, por ejemplo, la idea de que un recurso == una tabla no es la verdad. También encontrará que, por ejemplo, para su pregunta, el método PATCH HTTP es bastante común para actualizar uno o más campos. Donde el método POST o PUT (mucho debate aquí) puede usarse para actualizaciones completas de un recurso.
Luc Franken el

Respuestas:

17

Tiene una acción de actualización para un recurso. Como regla general, una tabla en su base de datos será un recurso. Entonces, en su ejemplo, hay un controlador para el Cliente con una acción de actualización y los campos son opcionales en la medida de lo posible.

Puede haber excepciones a esto (por ejemplo, si actualiza la contraseña, espera contraseña y contraseña_confirmación), pero esto es válido para la mayoría de los casos.

Es más probable que las excepciones sean controladores que tienen acciones limitadas para algunos recursos, como un SessionsController que solo se puede crear y destruir. Es muy poco probable que desee tener acciones para campos únicos.

En su ejemplo, una cosa podría manejarse como un recurso propio y esa es la dirección. Si tuviera una tabla para direcciones, especialmente si hubiera más de una dirección por cliente (facturación, entrega ...), esto podría manejarse como un recurso anidado. Pero, de nuevo, una acción de actualización para todo el recurso de dirección.

Thorsten Müller
fuente