Quão discreta deve ser uma API RESTful?

12

Eu nunca criei uma API RESTful antes e estou me perguntando quão discreta deveria ser.

Por exemplo, digamos que eu tenha um cliente com nome, endereço, número de telefone, endereço de email, idioma etc.

Faz sentido que haja uma maneira de atualizar cada campo individual (endereço de atualização, endereço de email de atualização etc.) ou deve haver apenas uma única atualização para todo o cliente e cada campo é opcional?

satur9nine
fonte
3
Que parte do REST você deseja? Se você apenas precisa de uma API simples, não se preocupe com os padrões, poderá lidar com ela da mesma forma que a resposta aceita de thorsten müller. Se você quer um REST real, precisa procurar por Roy Fielding (+ dissertação, por exemplo). Ele é o inventor do REST. Você verá que, por exemplo, a ideia de que um recurso == uma tabela não é a verdade. Você também descobrirá que, por exemplo, para sua pergunta, um método PATCH HTTP é bastante comum para atualizar um ou mais campos. Onde o método POST ou PUT (muito debate aqui) pode ser usado para atualizações completas de um recurso.
precisa saber é o seguinte

Respostas:

17

Você tem uma ação de atualização para um recurso. Como regra geral, uma tabela no seu banco de dados será um recurso. Portanto, no seu exemplo, há um controlador para o Cliente com uma ação de atualização e os campos são opcionais na medida do possível.

Pode haver exceções a isso (por exemplo, se você atualizar a senha que você espera password & password_confirmation), mas isso é válido na maioria dos casos.

É mais provável que as exceções sejam controladores que tenham ações limitadas para alguns recursos, como um SessionsController que só pode ser criado e destruído. É muito improvável que você deseje ter ações para campos únicos.

No seu exemplo, uma coisa pode ser tratada como um recurso próprio e esse é o endereço. Se você tivesse uma tabela para endereços, especialmente se houvesse mais de um endereço por cliente (cobrança, entrega ...), isso poderia ser tratado como um recurso aninhado. Mais uma vez, uma ação de atualização para todo o recurso de endereço.

thorsten müller
fonte