2012-06-14 17 views
8

Voy a escribir una API relajante, mi requisito es llamar a métodos en el objeto "Transaction", me preguntaba cómo debería llamar a Post/PUT con la plantilla de URI adecuada para que pueda Cree/actualice el recurso Transaction sin usar "verbos" en el mapeo Uri.Plantilla de URI para POST/PUT restful service

[OperationContract] 
[WebInvoke(Method = "POST", UriTemplate = "/Transaction/{**What to write here ????**}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
public Transaction AddTransaction(Transaction transaction) 
{ 
    return AddTransactionToRepository(transaction); 
} 

[OperationContract] 
[WebInvoke(Method = "PUT", UriTemplate = "/Transaction/{**What to write here ????**}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
public Transaction UpdateTransaction(Transaction transaction) 
{ 
    return UpdateTransactionInRepository(transaction); 
} 

tenga en cuenta que quiero aplicar las mejores prácticas para la asignación de URI y no quiero “verbos” en él, sólo “sustantivos”. También dígame cómo el cliente tendrá acceso a estos métodos para publicar y colocar con un URI único. Gracias

Respuesta

13

Tiene que asignar los URI de la siguiente manera para Transaction.

Obtener una transacción por ID - GET - transacción/Identificación del

Crear una nueva transacción - Post - transacción

actualización de una transacción - PUT - transacción/Identificación

Eliminar una transacción - BORRAR - transacción/Identificación del

Sus plantillas URI tiene que ser cambiado de la siguiente manera

[OperationContract] 
[WebInvoke(Method = "POST", UriTemplate = "/Transaction", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
public Transaction AddTransaction(Transaction transaction) 
{ 
    // 
} 

[OperationContract] 
[WebInvoke(Method = "PUT", UriTemplate = "/Transaction/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
public Transaction UpdateTransaction(int id, Transaction transaction) 
{ 
    // 
} 

cómo el cliente tendrá acceso a estos métodos para Post y Put con URI único

No necesita un URI único para POST y PUT. Los URI pueden ser iguales.

Referencias: http://www.asp.net/web-api/overview/creating-web-apis/creating-a-web-api-that-supports-crud-operations

http://msdn.microsoft.com/en-us/library/bb412172(v=vs.90).aspx

+0

Gracias Marcar por aclarar, estaba un poco confundido acerca de cómo el cliente lo comunicará de forma más legible, pero supongo que el cliente tiene que llamar a la misma URL pero especificando una acción diferente, es decir, publicar, poner, eliminar llamando al método Api. – MSUH

+0

@MSUH Eso es correcto – VJAI

+0

@Mark, ¿Por qué ambos métodos devuelven un objeto Transaction? Entiendo que el método POST podría necesitar esto, ya que el Id podría ser un número generado automáticamente en una base de datos, pero ¿por qué el método PUT? Gracias. – RobJohnson

2

PUT es para crear o actualizar un recurso conocido, por ejemplo: PUT/Transacciones/1234

Esto crearía (o actualización si ya existe) la transacción con el identificador de 1234. Esto significa que sólo puede use PUT cuando conozca la URL del recurso.

la POST crea un nuevo recurso niño, por ejemplo: poste/Transacciones/

Esto crearía un nuevo recurso transacción.

Aviso Realicé una transacción por lo que ahora representa una colección.

Al no ser un desarrollador de C#, no sé cuán fácil es este mapa para WCF, pero este enfoque es independiente de la tecnología.

Cuestiones relacionadas