Différences de service Web entre le REST et le RPC
j'ai un service web qui accepte de JSON paramètres et avoir des Url spécifiques pour les méthodes, par exemple:
http://IP:PORT/API/getAllData?p={JSON}
ce N'est certainement pas du repos car il n'est pas apatride. Il prend en compte les cookies et dispose de sa propre session.
5 réponses
vous ne pouvez pas faire une séparation claire entre le REST ou le RPC simplement en regardant ce que vous avez posté.
une contrainte du repos est qu'il doit être apatride. Si vous avez une session alors vous avez l'état de sorte que vous ne pouvez pas appeler votre service Reposful.
le fait que vous avez une action dans votre URL (i.e. getAllData
) est une indication vers RPC. Dans le repos vous échangez des représentations et l'opération que vous effectuez est dictée par les verbes HTTP. Aussi, au repos,Contenu la négociation n'est pas effectué avec un ?p={JSON}
paramètre.
Je ne sais pas si votre service est RPC, mais il n'est pas reposant. Vous pouvez en apprendre davantage sur la différence en ligne, voici un article pour vous aider à démarrer: Déboulonner les Mythes de la RPC ET REST. Vous savez mieux ce qu'il y a à l'intérieur de votre service, alors comparez ses fonctions à ce qu'est le RPC et tirez vos propres conclusions.
considérons L'exemple suivant D'API HTTP qui commande des modèles dans un restaurant.
- RPC API pense en termes de "verbes", exposant la fonctionnalité du restaurant comme des appels de fonction qui acceptent les paramètres, et invoque ces fonctions via le verbe HTTP qui semble le plus approprié - un ' get ' pour une requête, et ainsi de suite, mais le nom du verbe est purement accessoire et n'a pas de réelle influence sur la fonctionnalité réelle, depuis vous êtes appeler une URL différente à chaque fois. Les codes de retour sont codés à la main et font partie du contrat de service.
- REST API, en revanche, modélise les différentes entités dans le domaine problématique en tant que ressources, et utilise les verbes HTTP pour représenter les transactions par rapport à ces ressources - POST pour créer, mettre à jour, et obtenir à lire. tous ces verbes, invoqués sur la même URL, offrent des fonctionnalités différentes. Les codes de retour HTTP communs sont utilisés pour transmettre l'état des demandes.
Placer une Commande:
- RPC:http://MyRestaurant:8080/Orders/PlaceOrder (POST: {Tacos object})
- REST: http://MyRestaurant:8080/Orders/Order Je ne sais pas.OrderNumber=asdf (POST: {Tacos object})
Récupération d'une Commande:
- RPC:http://MyRestaurant:8080/Orders/GetOrder Je ne sais pas.OrderNumber=asdf (GET)
- reste: http://MyRestaurant:8080/Orders/Order Je ne sais pas.OrderNumber=asdf (GET)
mise à Jour d'une Commande:
- RPC:http://MyRestaurant:8080/Orders/UpdateOrder (METTRE: {Ananas Tacos objet})
- REST: http://MyRestaurant:8080/Orders/Order Je ne sais pas.OrderNumber=asdf (METTRE: {Ananas Tacos objet})
Exemple tiré de sites.google.com/site/wagingguerillasoftware/rest-series/what-is-restful-rest-vs-rpc
le repos est mieux décrit pour travailler avec les ressources, où as RPC est plus sur les actions.
repos signifie Representational State Transfer. C'est une façon simple d'organiser les interactions entre des systèmes indépendants. Les applications RESTful utilisent couramment des requêtes HTTP pour afficher des données (créer et/ou mettre à jour), lire des données (par exemple, faire des requêtes), et supprimer des données. Ainsi, REST peut utiliser HTTP pour les quatre CRUD (Create /Read / Update/Delete) opérations.
RPC est essentiellement utilisé pour communiquer entre les différents modules pour répondre aux demandes des utilisateurs. par exemple, dans openstack comme la façon dont nova, coup d'oeil et neutron travaillent ensemble lors du démarrage d'une machine virtuelle.
je dirais donc:
est-ce que mon entité détient/possède les données? Puis RPC: voici une copie de certaines de mes données, manipuler la copie de données que je vous envoie et me retourner une copie de votre résultat.
le appelée entité hold/propres données? Puis repos: soit (1) me montrer une copie de certaines de vos données ou (2) manipuler certaines de vos données.
en fin de compte, il s'agit du "côté" de l'action qui possède/détient les données. Et oui, vous pouvez utiliser repos verbiage pour parler à un Système basé sur RPC, mais vous continuerez à faire des activités RPC en le faisant.
exemple 1: j'ai un objet qui communique à un magasin de base de données relationnelles (ou tout autre type de magasin de données) via un DAO. Il est logique d'utiliser le style REST pour cette interaction entre mon objet et l'objet d'accès aux données qui peut exister en tant qu'API. Mon entité ne possède pas/ne détient pas les données, contrairement à la base de données relationnelle (ou à la mémoire de données non relationnelle).
Exemple 2: j'ai besoin de faire beaucoup de complexes mathématique. Je ne veux pas charger un tas de méthodes mathématiques dans mon objet, j'ai juste envie de transmettre certaines valeurs à quelque chose d'autre qui peut faire toutes sortes de mathématiques, et d'obtenir un résultat. Alors le style RPC a du sens, parce que l'objet/entité mathématique exposera à mon objet un tas d'opérations. Notez que ces méthodes pourraient Toutes être exposées en tant Qu'APIs individuels et je pourrais appeler l'un d'eux avec GET. Je peux même dire que c'est reposant parce que J'appelle via HTTP GET mais vraiment sous les couvertures c'est RPC. Mon entité possède / détient les données, l'entité distante n'effectue que des manipulations sur les copies des données que je lui ai envoyées.
C'est RPC utilisant http. Une mise en œuvre correcte de REST devrait être différente de RPC. Avoir une logique pour traiter les données, comme une méthode/fonction, est RPC. getAllData () est une méthode intelligente. Le repos ne peut pas avoir d'intelligence, il devrait être données dump qui peuvent être interrogées par un renseignements.
la plupart des implémentations de nos jours sont RPC mais beaucoup l'appellent par erreur REST parce qu'ils voient qu'ils n'utilisent pas XML/Soap mais HTTP + json. Le repos avec HTTP est le Sauveur et SOAP avec XML le méchant. Donc votre confusion est justifiée et vous avez raison, ce n'est pas du repos.
le protocole Http ne fait pas de repos d'implémentation. Les deux autres (GET, POST, PUT, PATCH, DELETE) et RPC(GET + POST) peuvent être développés via HTTP(par exemple via un projet D'API web dans visual studio). Une lecture très intéressante sur ce
le CPR est vieux et tous les écoliers savent ce qu'est le CPR et la plupart du reste développé finit par être RPC, ce qui est compréhensible. Mais qu'est-ce que le REPOS?
vous avez créé des sites Web qui peuvent être utilisés par les humains. Mais vous pouvez aussi construire des sites web qui sont utilisables par les machines? C'est là l'avenir lies, and RESTful Web Services vous montre comment le faire.
Ce livre RESTful Web Services aide