Je travaille sur une transition de mon application d'une implémentation PHP étroitement couplée à une implémentation RESTful. (application actuelle au http://coinvault.tanichols.com)Comment mieux structurer un point de terminaison API RESTful
L'application conserve une collection de pièces de monnaie (les quartiers de l'État, les dollars présidentiels, etc) et les utilisateurs. Un utilisateur peut également «collecter» une pièce de monnaie, représentée comme une relation multiple entre l'utilisateur et les tables de pièces.
J'ai créé le tableau suivant des combinaisons verbe et point final:
GET /coins - Get all coins
POST /coins - Create a new coin
GET /coins/CID - Get a coin
PUT /coins/CID - Update a coin
DELETE /coins/CID - Delete a coin
GET /users - Get all users
POST /users - Create a new user
GET /users/UID - Get a user
PUT /users/UID - Update a user
DELETE /users/UID - Delete a user
Ce que je vais avoir des problèmes avec est la bonne façon/accepté d'exposer l'information de nombreux-many table. Par exemple, je pourrais utiliser l'ensemble suivant des itinéraires:
GET /users/UID/coins - Get coins for a user
POST /users/UID/coins - Create a coin for a user
GET /users/UID/coins/CID - Get a specific coin for a user
PUT /users/UID/coins/CID - Update a specific coin for a user
DELETE /users/UID/coins/CID - Delete a specific coin for a user
ou je pourrais inverser cela:
GET /coins/CID/users/UID - Get a specific coin for a user
PUT /coins/CID/users/UID - Update a specific coin for a user
DELETE /coins/CID/users/UID - Delete a specific coin for a user
Q1: Est-ce un de ces préféré sur l'autre? Existe-t-il une façon standard ou acceptée de planifier ces types de routes?
Je pourrais aussi exposer cette fonctionnalité avec la route et le filtre suivant:
GET /coins?user_id=1 - Get all coins belonging to a user
Q2: Est-ce une meilleure approche, ou pire? Cela ajoute-t-il un 'poids' inutile à la route/coins? Finalement, il y a la situation où je veux donner accès à certaines agrégations, comme le compte du nombre de fois qu'une pièce particulière a été collectée, à des fins de reporting et d'analyse. Pour celui-ci, je suis complètement à la perte d'où commencer, ou comment aborder le problème.
Q3: Comment exposer de telles agrégations via une API RESTful? Qu'est-ce qu'un itinéraire significatif pour cela?
Merci @arnaud, votre réponse à la troisième question m'a vraiment éclairci certaines choses. Je n'arrête pas d'oublier que je peux retourner toutes les données que je veux avec la réponse, pas seulement ce qui est dans cette table. Par exemple, je peux renvoyer une valeur totalCollected dans le JSON, même si ce n'est pas dans la table. Merci d'avoir éclairci ça. – ThomasNichols89