REST-Qu'entend-on exactement par Interface uniforme?

Wikipédia:

interface uniforme

la contrainte d'interface uniforme est fondamentale pour la conception de tout service de repos.[14] l'interface uniforme simplifie et décompose l'architecture, ce qui permet à chaque pièce d'évoluer indépendamment. Les quatre principes directeurs de cette interface sont:

Identification des ressources

les ressources individuelles sont identifié dans les requêtes, par exemple en utilisant URIs dans les systèmes de repos basés sur le web. Les ressources elles-mêmes sont conceptuellement séparées des représentations qui sont retournées au client. Par exemple, le serveur peut envoyer des données à partir de sa base de données en HTML, XML ou JSON, dont aucune n'est la représentation interne du serveur, et c'est la même ressource indépendamment.

Manipulation des ressources par ces représentations

Lorsqu'un client détient représentation d'une ressource, y compris toute métadonnée jointe, qui contient suffisamment d'information pour modifier ou supprimer la ressource.

messages auto-descriptifs

chaque message comprend suffisamment d'information pour décrire la façon de traiter le message. Par exemple, l'analyseur à invoquer peut être spécifié par un type de média Internet (précédemment connu sous le nom de type MIME). Les réponses indiquent aussi explicitement leur cachéabilité.

hypermédia comme moteur de l'état d'application (A. K. A. HATEOAS)

Les Clients effectuent des transitions d'état uniquement par des actions qui sont dynamiquement identifiées dans l'hypermédia par le serveur (par exemple, par des hyperliens dans l'hypertexte). À l'exception de points d'entrée fixes simples à la demande, un client ne suppose pas qu'une action particulière est disponible pour des ressources particulières au-delà de celles décrites dans les représentations reçues précédemment de la serveur.

je suis en train d'écouter une conférence sur le sujet et le professeur a dit:

" quand quelqu'un arrive à notre API, si vous êtes capable d'obtenir un objet client et que vous savez qu'il y a des objets ordre, vous devriez être en mesure d'obtenir les objets ordre avec le même modèle que vous avez obtenu les objets client. Ces URI vont se ressembler."

cela me semble erroné. ce n'est pas tellement à propos de quoi l'apparence des URI ou leur cohérence, car c'est la façon dont les URI sont utilisées (identifier les ressources, manipuler les ressources par des représentations, des messages auto-descriptifs et des hateoas).

Je ne pense pas que ce soit ce que Uniform Interface signifie du tout. Que signifie exactement?

17
demandé sur richard 2014-08-07 04:52:09

4 réponses

utiliser des interfaces pour découpler les classes de l'implémentation de leurs dépendances est un concept assez ancien. Je suis surpris que vous n'en ayez pas entendu parler...

By REST vous utilisez le même concept pour découpler le client de la mise en œuvre du service REST. Afin de définir une interface (contrat entre le client et le service), vous devez utiliser les normes. C'est parce que si vous voulez un réseau de la taille d'internet des services de repos, vous devez appliquer global des concepts, comme des normes pour les faire se comprendre.

  • Identification des ressources - vous utilisez la norme URI (IRI) pour identifier une ressource. Dans ce cas, une ressource est un document web.

  • Manipulation des ressources à travers ces représentations - vous utilisez la norme HTTP pour décrire la communication. Ainsi par exemple GET signifie que vous voulez récupérer des données sur la ressource identifiée URI. Vous pouvez décrire une opération avec un HTTP méthode et URI.

  • messages auto-descriptifs - vous utilisez les types MIME standard et les vocabs RDF (standard) pour rendre les messages auto-descriptifs. Ainsi, le client peut trouver les données en vérifiant la sémantique, et il n'a pas besoin de connaître la structure de données spécifique à l'application que le service utilise.

  • Hypermedia comme moteur de l'état d'application ( A. K. A. HATEOAS) - vous utilisez des hyperliens et éventuellement des modèles URI pour découpler le client de l'application structure URI spécifique. Vous pouvez annoter ces liens hypertextes avec de la sémantique, par exemple IANA link relations, afin que le client comprenne ce qu'ils signifient.

25
répondu inf3rno 2014-09-25 23:29:24

Ok je pense que je comprends ce que cela signifie.

à Partir de Fieldings thèse:

la caractéristique centrale qui distingue le style architectural REST des autres styles basés sur le réseau est l'accent mis sur une interface uniforme entre les composantes (Figure 5-6). En appliquant le génie logiciel principe de généralité à l'interface des composants, l'architecture globale du système est simplifiée et la visibilité des interactions est améliorée.

il dit que l'interface entre les composants doit être la même. IE. entre client et serveur et tous les intermédiaires, qui sont tous des composants.

2
répondu richard 2014-08-07 01:33:03

votre question est assez large, vous semblez Demander une reformulation des définitions que vous avez. Cherchez-vous des exemples ou ne comprenez-vous pas somethings spécifiquement indiqué.

je suis d'accord que la ligne:

ces URI vont se ressembler

est fondamentalement mauvais. Il n'est pas nécessaire que ces interfaces se ressemblent pour que la contrainte D'interface uniforme soit respectée. Ce qui doit être présent, est une manière uniforme à découvrez les Uri qui identifient les ressources. Cette façon uniforme est unique à chaque type de message, et il doit y avoir une certaine forme convenue. Par exemple, en HTML, une ressource d'un document renvoie à une autre par une simple balise:

<a href="URI of related resource" rel="defined relationship">fallback relationship</a>

les serveurs HTTP renvoient le html comme un type de ressource texte/html que les navigateurs ont une façon convenue d'analyser. La balise anchor est le contrôle hypermédia (HATEOAS) qui a l'identifiant unique pour la ressource liée.

le seul point que la manipulation n'était pas couverte. HTML a un autre exemple impressionnant de ceci, la balise de forme:

<form action="URI" method="verb">
  <input name=""></input>
</form>

encore une fois, le navigateur savent comment interpréter cette méta-information pour définir une représentation de la ressource a agi sur À L'URI. Malheureusement HTML ne vous permet D'obtenir et de poster que des verbes...

plus souvent dans un service basé sur JOSN, quand vous récupérez une ressource personne, il est facile de manipuler cette représentation et ensuite de la mettre ou de la Patcher directement à son URL canonique. Aucune connaissance préalable de la ressource n'est nécessaire pour la modifier. Maintenant, quand nous écrivons le code client nous obtenons tout enveloppé avec l'idée que nous n'avons en effet besoin de connaître la forme avant que nous consommons...mais c'est vraiment juste pour faire de nos analyseurs efficace et facile. Nous pourrions faire des analyseurs qui analysent la signification sémantique de chaque partie d'une ressource et la modifier en interprétant l'intention de la modification. C'est-à-dire: une commande de rendre la personne de 10 ans plus âgée analyserait la ressource à la recherche de la age, identifiez l'âge, puis ajoutez 10 ans à cette valeur, puis renvoyez cette ressource au serveur. Est-il plus facile d'avoir du code qui s'attend à ce que l'âge soit à un chemin JSON de $.l'âge? absolument...mais ce n'est pas particulièrement nécessaire.

2
répondu Chris DaMour 2017-06-13 18:52:08

"interface Uniforme" signifie en fait que les réponses du serveur doivent annoncer les actions et les ressources disponibles. En d'autres termes, les ressources d'interrogation devraient permettre au client de demander d'autres actions et ressources sans les connaître à l'avance.

JSON-API spec offre un bon exemple:

{
  "links": {
    "self": "http://example.com/articles",
    "next": "http://example.com/articles?page[offset]=2",
    "last": "http://example.com/articles?page[offset]=10"
  },
  "data": [{
    "type": "articles",
    "id": "1",
    "attributes": {
      "title": "JSON API paints my bikeshed!"
    },
    "relationships": {
      "author": {
        "links": {
          "self": "http://example.com/articles/1/relationships/author",
          "related": "http://example.com/articles/1/author"
        },
      },
      "comments": {
        "links": {
          "self": "http://example.com/articles/1/relationships/comments",
          "related": "http://example.com/articles/1/comments"
        }
      }
    },
    "links": {
      "self": "http://example.com/articles/1"
    }
  }]
}

juste en analysant cette réponse unique, un client sait:

  1. ce qu'il a de l'interrogation (articles)
  2. comment sont structurés articles (id, titre, auteur, commentaires)
  3. comment récupérer des objets apparentés (c.-à-d. auteur, liste de commentaires)
  4. qu'il y a plus d'articles (10, basé sur la réponse actuelle de la longueur et de la pagination des liens)

j'Espère que cette aide.

Pour les passionnés du sujet, je recommande vivement la lecture Thomas Fielding thèse de!

2
répondu Cédric Françoys 2018-04-07 10:08:43