2012-12-16 5 views
1

Je dois développer une API REST et j'ai des doutes sur la conception de l'URI.REST API URI Design

Scénario:

1 - Je développe une interface REST à un ensemble de services. 2 - chaque service est divisé du point de vue logique en plusieurs parties (pas de ressources).

3 - chaque ressource est accessible de deux manières "A" et "B"

Quelle est la conception URI le plus approprié:

/service1/part1/ressources {A | B? }

/service1, part1, ressource {A |? B}

Répondre

0

Bien que ce soit la structure des URL fonctionnera, des choix que vous avez énumérés/service1/part1/ressources {A |? B} est beaucoup plus typique, et a la plus grande chance de travailler avec REST commun Les outils de consommation d'API, étant intuitivement compris par les développeurs, etc. La signification des barres obliques est définie dans la norme URI (RFC 1630 je pense) et les URI relatives ne fonctionneront qu'avec les barres obliques.

+0

lors de l'utilisation de GET/service1/part1/resource? {A | B} cela signifie que GET/service1 doit renvoyer une liste de services? Ce n'est pas le cas. Donc dois-je utiliser/service1/part1/resource? {A | B} ou/service1, part1, ressource? {A | B} – JSV

0

Celui-ci est mieux:

/service1/part1/resource?{A|B} 

comme il met l'accent sur la hiérarchie (grâce à des barres obliques).

De plus, les «façons d'accéder aux ressources» sont généralement prononcées à l'aide de verbes HTTP (tels que GET, POST, PUT, DELETE, HEAD, etc.). Si c'est ce que vous vouliez dire par "manières", vous devez absolument vous en tenir aux verbes HTTP.

+0

Mais service1/part1 n'est pas une hiérarchie. J'ai lu que "Mettre les caractères de ponctuation dans les variables de chemin pour éviter d'impliquer la hiérarchie où n'existe pas:/parent/child1; child2" Donc si part1 n'est pas un enfant de service1. Service1 est divisé en plusieurs parties l'URI devrait être/service1, part1, ressource? {A | B}? – JSV

+0

@JSV: Toute source pour cela (je demande à propos de "_Put caractères de ponctuation dans les variables de chemin pour éviter d'impliquer une hiérarchie là où il n'existe pas:/parent/child1; child2_")? Veuillez également noter que le point-virgule n'est pas ** la même chose que la virgule - le point-virgule est réservé pour des utilisations spéciales, dépendantes du schéma, par exemple. séparer _param_ - par opposition à _query_ - du _path_ (http://tools.ietf.org/html/rfc2396.html). – Tadeck

+0

@JSV: De plus, cela n'a pas besoin d'imiter l'architecture du serveur, il suffirait de représenter la structure logique dans l'API REST, donc même si vous n'avez pas cette structure sur le serveur, mieux vaut le présenter comme tel, montrant regroupements logiques des ressources. – Tadeck