Todavía estoy aprendiendo sobre REST y, en mi prueba, se me ocurrió este escenario que no sé cómo manejar.¿Cómo agregaría datos nuevos a través de un servicio REST opuesto al servicio de estilo RPC?
Tengo un servicio de muestra WCF que utiliza Linq-to-Sql. Es una base de datos tremendamente simple con una sola tabla llamada "Tareas" que tiene cuatro campos: Id, Descripción, IsCompleted y EnteroDate. (Mencioné esto porque no tengo contratos de datos definidos en el servicio en sí, todo proviene del Contexto creado por Linq.)
Obtener datos fue trivial convertir a REST ... como borrar datos. Sin embargo, insertar nuevos registros no parece tan fácil.
Mi operación de contrato de estilo RPC se ve así:
[OperationContract]
void AddTask(string description);
El Id, IsCompleted y EnteredDate no son necesarios como la implementación del servicio se ve así:
public void AddTask(string description)
{
TaskListLinqDataContext db = new TaskListLinqDataContext();
Task task = new Task()
{ Description = description, IsCompleted = false,
EntryDate = DateTime.Now };
db.Tasks.InsertOnSubmit(task);
db.SubmitChanges();
}
la identificación es una Identidad y, por lo tanto, manejada por la base de datos.
Mi primer pensamiento fue para decorar el contrato de operación como ésta:
[WebInvoke(Method="PUT", UriTemplate="tasks/{description}")]
[OperationContract]
void AddTask(string description);
Pero no se sabe muy bien cómo conseguir que esto funcione. Cuando intento usar Fiddler para agregar esto, devuelve un resultado de 411 (longitud requerida).
¿Cuál sería la forma correcta de hacerlo? ¿Tendré que volver a escribir la implementación para aceptar un documento XML completo que represente el nuevo registro?
@thaggie: el enlace adjunto me dice que mi UriTemplate y el funcionamiento son probablemente válidos, pero no me ayudan a resolver mi problema. No sé cómo obtener los datos para el servicio correctamente. Por ejemplo, ¿qué tipo de Creador de solicitudes utilizaría Fiddler para obtener los datos en el servicio? –