Je suis encore en train d'apprendre à propos de REST et, dans mon test, j'ai trouvé ce scénario que je ne sais pas comment gérer.Comment ajouter de nouvelles données via un service REST opposé au service de style RPC?
J'ai un exemple de service WCF qui utilise Linq-to-Sql. C'est une base de données extrêmement simple avec une seule table appelée "Tâches" qui a quatre champs: Id, Description, IsCompleted et EnteredDate. (J'ai mentionné cela parce que je n'ai aucun contrat de données défini dans le service lui-même, tout vient du Contexte créé par Linq.)
Obtenir des données était trivial à convertir en REST ... tout comme la suppression de données. Cependant, l'insertion de nouveaux enregistrements ne semble pas aussi facile.
Mon opération de contrat RPC style ressemble à ceci:
[OperationContract]
void AddTask(string description);
Le Id, IsCompleted et EnteredDate ne sont pas nécessaires comme la mise en œuvre du service ressemble à ceci:
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();
}
Le Id est un Identité et donc géré par la base de données.
Ma première pensée a été pour décorer le contrat d'exploitation comme celui-ci:
[WebInvoke(Method="PUT", UriTemplate="tasks/{description}")]
[OperationContract]
void AddTask(string description);
Mais je ne sais pas vraiment comment obtenir ce travail. Lorsque j'essaie d'utiliser Fiddler pour ajouter ceci, il renvoie un résultat de 411 (Length Required).
Quelle serait la bonne façon de procéder? Devrai-je réécrire l'implémentation pour accepter un document XML complet représentant le nouvel enregistrement?
@thaggie: le lien ci-joint m'indique que mon UriTemplate et mon fonctionnement sont probablement valides, mais ne m'aident pas à résoudre mon problème. Je ne sais pas comment obtenir les données au service correctement. Par exemple, quel type de générateur de requêtes Fiddler utiliserait-il pour obtenir les données dans le service? –