En comparant la structure REST [api] avec un modèle OO, je vois ces similitudes:
Tous les deux:
Sont orientés données
- REST = Ressources
- OO = Objets
Fonctionnement surround autour des données
- REST = entourer les VERBES (Get, Post, ...) autour des ressources
- OO = promouvoir le fonctionnement autour des objets par encapsulation
Cependant, les bonnes pratiques OO ne se tiennent pas toujours sur les API REST lorsque vous essayez d'appliquer le motif de façade par exemple: dans REST, vous n'avez pas 1 contrôleur pour gérer toutes les demandes ET vous ne cachez pas la complexité des objets internes.
Au contraire, REST favorise la publication des ressources de toutes les relations avec une ressource et autres sous au moins deux formes:
via les relations de hiérarchie des ressources (Un contact de l'id 43 est composé d'une adresse 453):
/api/contacts/43/addresses/453
via des liens dans une réponse json REST:
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
Pour en revenir à OO, le motif de conception de façade respecte un Low Coupling
entre un objetA et son « client objectB » et High Cohesion
pour cet objetA et sa composition d'objet interne ( objectC , objectD ). Avec l' objectA interface, cela permet à un développeur d'impact limite objectB des ObjectA changements internes (en ObjectC et objectD ), tant que le objectA api (opérations) sont toujours respectées.
Dans REST, les données (ressource), les relations (liens) et le comportement (verbes) sont éclatés en différents éléments et disponibles sur le Web.
En jouant avec REST, j'ai toujours un impact sur les changements de code entre mon client et mon serveur: parce que j'ai High Coupling
entre mes Backbone.js
demandes et Low Cohesion
entre les ressources.
Je n'ai jamais compris comment laisser mon Backbone.js javascript application
accord avec la découverte de " ressources et fonctionnalités REST " promu par les liens REST. Je comprends que le WWW est destiné à être servi par plusieurs serveurs et que les éléments OO ont dû être explosés pour être servis par de nombreux hôtes, mais pour un scénario simple comme "enregistrer" une page montrant un contact avec ses adresses, Je me retrouve avec:
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
ce qui m'a amené à déplacer l'action d'économie de responsabilité transactionnelle atomique sur les applications des navigateurs (puisque deux ressources peuvent être adressées séparément).
Dans cet esprit, si je ne peux pas simplifier mon développement (modèles de conception de façade non applicables), et si j'apporte plus de complexité à mon client (gestion de la sauvegarde atomique transactionnelle), quel est l'avantage d'être RESTful?
PUT /api/contacts/43
cascade des mises à jour des objets internes? J'ai eu beaucoup d'API conçues comme ça (l'URL principale lit / crée / met à jour le "tout" et les sous-URL mettent à jour les morceaux). Assurez-vous simplement de ne pas mettre à jour l'adresse lorsqu'aucune modification n'est requise (pour des raisons de performances).