2016-12-19 2 views
0

Par souci de simplicité, disons que nous stockons des informations personnelles comme tant d'utilisateurs (JSON, mais ce n'est pas le point):REST - Comment allusion clients sur la façon de représenter les données tout en maintenant le découplage

{ 
    "name": "John" 
    "age": 35 
    "sex": "M" 
} 

Nous voulons que le client de l'interface utilisateur crée un formulaire pour afficher ces informations et également pour créer de nouveaux utilisateurs ou mettre à jour des utilisateurs existants.

Alors, ma question est:

Comment cela peut-il être atteint d'une manière RESTful? Est-ce que REST prévoit même ce genre d'interactions, c'est-à-dire, suggérer aux clients comment afficher les ressources fournies?

Nous souhaitons donner aux clients un maximum de liberté sur la façon de représenter les ressources, mais aussi de les aider à nous renvoyer les données correctes sans trop de couplage entre backend et frontend.

Par exemple, nous pourrions avoir un modèle pour user comme ceci:

{ 
    "self": "/template/user" 
    "method": "GET" 
    "data": { 
     "fields": [ 
       { 
        "name": "name" 
        "value": { 
         "data_type": "string"      
        } 
       }, 
       { 
        "name": "age" 
        "value": { 
         "data_type": "number"      
        } 
       }, 
       { 
        "name": "sex" 
        "value": { 
         "data_type": "string" 
         "options": [ 
          "M", 
          "F" 
         ] 

        } 
       } 
     ] 
    } 
} 

Merci pour toute entrée que vous pourriez être en mesure de fournir.

+0

Comme votre exemple contient du JSON, vous pouvez jeter un oeil à [json-schema] (http://json-schema.org/) pour décrire l'entrée réelle valide ou les champs attendus d'une requête. Pour les messages XML, vous pouvez utiliser XSD (ou DTD) pour apprendre au client ce qu'il est censé envoyer. Pour d'autres types de documents, il devient un peu moins clair sur la façon d'enseigner/soutenir un client. Les clients peuvent cependant avoir besoin d'un type de support spécial pour pouvoir supporter ces capacités, comme avec les types de média par défaut (ie application/json) ils peuvent ne pas respecter ces schémas –

+0

Comme mon commentaire précédent était plus lié sur le le client sur quoi renvoyer "préoccupation et moins sur le support de vue, mon commentaire pourrait ne pas vous avoir aidé beaucoup je suppose. Si une API ou un serveur doit aider un client à suggérer aux clients comment présenter des formulaires, pourquoi ne pas envoyer une sortie HTML spécifique (y compris le formulaire) du serveur au client? Si le client est un navigateur (ou un composant compatible avec le navigateur), la présentation du formulaire n'est qu'un simple rendu de la réponse.Le client peut demander de l'aide via la négociation de contenu ('text/html') ou faire ses propres choses (' application/json') –

+0

Merci beaucoup, mais voir mon commentaire à @voiceofunreason répondre pour voir pourquoi j'essayais d'éviter envoi de HTML. – Johnny

Répondre

0

Comment cela peut-il être réalisé de manière RESTful? Est-ce que REST prévoit même ce genre d'interactions, c'est-à-dire, suggérer aux clients comment afficher les ressources fournies?

L'application de référence pour REST est le World Wide Web; comment l'avons-nous fait là?

1) nous avons utilisé un type de média (HTML) qui a soutenu dans les instructions de présentation de la bande qui pourrait, à la discrétion du client, être interprétées par le choix du client de moteur de rendu

2) nous avons fourni des liens vers des ressources auxiliaires (CSS) qui pourrait éventuellement être récupérée pour fournir des indications de présentation supplémentaires au moteur de rendu. Notez que cela dépendait du fait que text/html et text/css étaient bien définis (standardisés) afin que les moteurs de rendu (navigateurs) puissent être développés indépendamment des serveurs.

Je n'ai vu aucune alternative au HTML comme standard pour le partage des instructions de rendu avec le client. Ma suggestion en tant que première approche serait de lier votre représentation de données à une représentation html, qui peut être utilisée par les clients qui comprennent le rendu.

+0

Vous et @RomanVottner suggérez d'envoyer du code HTML. Bien que je comprenne parfaitement pourquoi, j'essayais d'éviter cela parce que je voulais donner au client un maximum de liberté. Par exemple 'options' pourrait être rendu en sélectionnant des listes déroulantes ou des boutons radio. Si je force le client à utiliser une représentation en faveur d'une autre, je la limiterai finalement. – Johnny