J'ai une base de données avec une table qui contient des plans d'entraînement
. Voici un exemple de données:
/workout-plans?level=beginner&week=1 /workout-plans/beginner/1 /workout-plans/beginner?week=1
Quelle est la meilleure façon d'obtenir un élément spécifique en utilisant week_index
et level
. Voici mes idées actuelles, mais je ne connais pas les meilleures pratiques pour une API REST.
{ id: 1, level: 'beginner' week_index: 1 }, { id: 2, level: 'beginner' week_index: 2 }, { id: 3, level: 'advanced' week_index: 1 }
4 Réponses :
Je pense que vous devriez utiliser / workout-plans? level = beginner & week = 1
. Parce que, de cette manière, il est clair que vous demandez des données au contrôleur workout-plans
.
Ou, vous pouvez utiliser: / workout-plans / level / beginner / week / 1
Tels que: dans Rails
, la configuration de l'itinéraire peut être comme ceci:
/ workout-plans / level /: level / week /: week
p >
J'espère que cela aide.
/ workout-plans? level = beginner week = 1
semble être le meilleur moyen, comme vous le dites, car vous savez de quel contrôleur il provient. Merci!
@KarlTaylor Bienvenue.
Commencez par ajouter de la signification à chaque verbe HTTP.
Évitez les paramètres de chemin comme filtres, préférez les paramètres de requête pour cela.
Il est relativement simple de créer un client de repos reposant sur un tel contrat.
De plus, les paramètres de requête spéciaux tels que page et pageSize avec des valeurs par défaut appropriées sont les bienvenus.
Puisque vous concevez une API, essayez de renvoyer des codes d'état et des messages significatifs.
Cet article contient des informations plus détaillées et pour un autre point de vue, consultez cet article d'opinion , choisissez le HATEOAS. p >
Ne répond pas à la question.
/ workout-plans /
est le chemin d'accès à la liste des plans d'entraînement. Donc, il renvoie toujours une liste, même s'il n'y a qu'un seul résultat.
Donc, / workout-plans /? Level = beginner & week = 1
donne 1 résultat, mais sous forme de liste.
Si c'est la manière souhaitée de traiter un seul d'entre eux (par niveau et semaine, pas par identifiant), alors l'URL pour en obtenir un serait quelque chose comme
/workout-plans/1/beginner/ /workout-plans/beginner/1/ /workout-plans/beginner-1/
Ou quelque chose comme ça.
Je préfère le dernier, car il ne suggère pas de niveau entre la liste complète et le chemin de détail; si vous choisissez le premier, que faire si quelqu'un vous demande / workout-plans / 1 /
.
Je dirais que / workout-plans / 1 serait / workout-plans /: id
- il obtiendrait l'ID de la ligne. C'est donc là que je veux éviter toute confusion! Les paramètres de requête semblent meilleurs 😊
Le moyen REST pour obtenir un élément spécifique serait de créer un formulaire . Vous savez, comme un formulaire sur le Web. Dans ce "formulaire de recherche", le client saisissait la semaine et le niveau, et obtiendrait un résultat ou une redirection vers une liste d'entraînements applicables.
L'URI exact de la page de résultats n'est pas pertinent, bien que votre première solution avec des paramètres de chemin soit compatible avec les formulaires HTML simples, donc cela fonctionnerait immédiatement avec le formulaire HTML GET, ce qui est bien.
En général, pensez toujours aux pages HTML que vous créeriez pour les humains, ce sont généralement celles que vous devriez également créer pour les clients REST.
À moins que vous ne vouliez simplement du JSON standard sur HTTP, auquel cas il n'y a pas de telles contraintes.
Puisque le plan d'entraînement est votre article et que les autres critères de filtrage, je choisirais: / workout-plans? Level = beginner week = 1
Tous ont un identifiant: 1? C'est inhabituel. Le niveau de combinaison et week_index sont-ils uniques ensemble?
@RemcoGerlich oups c'est ma faute .. corrigé.