Ne vous inquiétez pas trop si votre API initiale est entièrement RESTful ou non (surtout lorsque vous êtes juste au stade alpha). Faites fonctionner la plomberie principale en premier. Vous pouvez toujours faire une sorte de transformation / réécriture d'URL pour mapper les choses, en affinant de manière itérative jusqu'à ce que vous obteniez quelque chose d'assez stable pour des tests généralisés ("beta").
Vous pouvez définir des URI dont les paramètres sont codés par position et convention sur les URI eux-mêmes, préfixés par un chemin que vous savez que vous mapperez toujours à quelque chose. Je ne connais pas PHP, mais je suppose qu'une telle fonctionnalité existe (comme elle existe dans d'autres langages avec des frameworks web):
.c'est à dire. Effectuez une recherche de type "utilisateur" avec param [i] = valeur [i] pour i = 1..4 sur le magasin # 1 (avec valeur1, valeur2, valeur3, ... comme raccourci pour les paramètres de requête URI):
1) GET /store1/search/user/value1,value2,value3,value4
ou
2) GET /store1/search/user,value1,value2,value3,value4
ou comme suit (bien que je ne le recommanderais pas, plus à ce sujet plus tard)
3) GET /search/store1,user,value1,value2,value3,value4
Avec l'option 1, vous mappez tous les URI préfixés avec /store1/search/user
le gestionnaire de recherche (ou la désignation PHP) par défaut pour effectuer des recherches de ressources sous store1 (équivalent à /search?location=store1&type=user
.
Par convention documentée et appliquée par l'API, les valeurs des paramètres 1 à 4 sont séparées par des virgules et présentées dans cet ordre.
L'option 2 ajoute le type de recherche (dans ce cas user
) comme paramètre positionnel # 1. L'une ou l'autre option n'est qu'un choix esthétique.
L'option 3 est également possible, mais je ne pense pas que je l'aimerais. Je pense que la capacité de recherche dans certaines ressources devrait être présentée dans l'URI lui-même précédant la recherche elle-même (comme si elle indiquait clairement dans l'URI que la recherche est spécifique au sein de la ressource.)
L'avantage de cela sur le passage de paramètres sur l'URI est que la recherche fait partie de l'URI (traitant ainsi une recherche comme une ressource, une ressource dont le contenu peut - et changera - au fil du temps.) L'inconvénient est que l'ordre des paramètres est obligatoire .
Une fois que vous avez fait quelque chose comme ça, vous pouvez utiliser GET, et ce serait une ressource en lecture seule (puisque vous ne pouvez pas POST ou PUT - il est mis à jour quand il est GET). Ce serait également une ressource qui n'existerait que lorsqu'elle serait invoquée.
On pourrait également y ajouter plus de sémantique en mettant en cache les résultats pendant un certain temps ou avec une SUPPRESSION entraînant la suppression du cache. Cependant, cela peut aller à l'encontre de ce que les gens utilisent généralement pour SUPPRIMER (et parce que les gens contrôlent généralement la mise en cache avec des en-têtes de mise en cache.)
La façon dont vous allez procéder serait une décision de conception, mais ce serait la façon dont je procéderais. Ce n'est pas parfait, et je suis sûr qu'il y aura des cas où ce n'est pas la meilleure chose à faire (spécialement pour des critères de recherche très complexes).