Antes de cavar en el reposo, aquí hay algunos términos que realmente necesita para captar:
de recursos - La cosas/datos que desea poner a disposición en su API (en su caso, un " Usuario ")
URI - Una identificación universalmente única para un recurso. No debe mencionar nada sobre el método que se está realizando (por ejemplo, no debe contener "agregar" o "eliminar"). Sin embargo, la estructura de su URI no hace que su aplicación sea más o menos RESTANTE; esta es una idea errónea común.
Interfaz uniforme - Un conjunto fijo de operaciones puede realizar en sus recursos, en la mayoría de los casos esto es HTTP. Existen definiciones claras para cada uno de estos métodos HTTP.
Lo más inquietante que tienen sus URI es que tienen información sobre la operación que se está realizando en ellos. ¡Los URI son identificaciones y nada más!
Tomemos un ejemplo del mundo real. Mi nombre es Nathan. "Nathan" podría considerarse mi identificación (o en términos de descanso URI - a los fines de este ejemplo supongo que soy el único "Nathan"). Mi nombre/ID no cambia en función de cómo te gustaría interactuar conmigo, p. Mi nombre no cambiaría a "NathanSayHello" cuando quisiste saludarme.
Pasa lo mismo con REST. Su usuario identificado por http://api.domain.com/users/1 no cambia a http://api.domain.com/users/1/update.xml cuando desea actualizar ese usuario. El hecho de que quiera actualizar ese usuario está implícito en el método que está utilizando (por ejemplo, PUT).
Aquí es mi sugerencia para sus URIs
# Retrieve info about a user
GET http://api.domain.com/user/<id>
# Retrieve set all users
GET http://api.domain.com/users
# Update the user IDed by api.domain.com/user/<id>
PUT http://api.domain.com/user/<id>
# Create a new user. The details (even <id>) are based as the body of the request
POST http://api.domain.com/users
# Delete the user ID'd by api.domain.com/user/<id>
DELETE http://api.domain.com/user/<id>
En cuanto a sus preguntas:
Uso PUT y DELETE cuando sea apropiado y evite la sobrecarga de POST para manejar estas funciones, ya que rompe HTTP's definition of POST. HTTP es tu interfaz uniforme. Es su contrato con el usuario de API sobre cómo pueden esperar interactuar con su servicio. Si rompe HTTP, rompe este contrato.
Eliminar "agregar" por completo. Utilice el encabezado Content-Type de HTTP para especificar el tipo de mime de los datos publicados.
¿Se refiere a la versión de su API o la versión del recurso? ETag y otros encabezados de respuesta se pueden usar para versionar los recursos.
Muchas opciones aquí. Basic HTTP Auth (fácil pero inseguro), Digest Auth, autenticación personalizada como AWS. OAuth también es una posibilidad. Si la seguridad es de importancia principal, uso certificados SSL del lado del cliente.
[API REST Arquitectura - Buenas Prácticas] (http://dasunhegoda.com/rest-api-architecture-best-practices/1049/) – Techie