2017-10-20 3 views
2

J'ai regardé autour pendant un petit moment maintenant et n'arrive pas à trouver quelque chose qui touche même aux différences. Comme le titre l'indique, j'essaie de savoir quelle différence obtenir vos données via les paramètres de chemin d'URL comme /content/7 puis en utilisant regex dans votre urls.py, et les obtenir à partir des paramètres de requête comme /content?num=7 en utilisant request.GET.get() fait réellement.Paramètres de chemin d'URL vs paramètres de requête dans Django

Quels sont les avantages et les inconvénients de chacun, et y a-t-il des scénarios où l'un serait clairement un meilleur choix que l'autre? De plus, d'après ce que je peux dire, la méthode préférée de (Django) semble utiliser des paramètres de chemin d'URL avec regex. Y a-t-il une raison à cela, autre que des URL potentiellement plus propres? Toute information supplémentaire pertinente sur le sujet est la bienvenue.

+1

vous devriez reformuler votre question: les paramètres d'URL et les paramètres de la requête sont la même chose. Vous voulez dire les paramètres de chemin (au lieu des paramètres d'URL). – dirkgroten

Répondre

1

Cela dépend du modèle architectural auquel vous souhaitez adhérer. Par exemple, selon le modèle architectural REST (que nous pouvons considérer comme le plus commun), vous voulez faire des URL de conception telles que sans les paramètres de requête, ils pointent vers des ressources qui correspondent approximativement aux noms de votre application. aux actions que vous pouvez effectuer sur cette ressource.

Si, par exemple, votre application a des utilisateurs, vous souhaitez concevoir des URL comme ceci:

GET /users/ # gets all users 
POST /users/ # creates a new user 
GET /users/<id>/ # gets a user with that id. Notice this url still points to a user resource 
PUT /users/<id> # updates an existing user's information 
DELETE /users/<id> # deletes a user 

Vous pouvez ensuite utiliser params de requête pour filtrer un ensemble d'utilisateurs à une ressource. Par exemple, pour amener les utilisateurs qui sont actifs, votre URL ressemblerait à quelque chose comme

/users?active=true 

Donc, pour résumer, la requête params chemin par rapport params dépend de votre préférence architecturale.

Une explication plus détaillée de REST: http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api

version de Roy Fielding si vous voulez vraiment académique: http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

+0

Donc, dans un scénario général (alias non-REST), il s'agit principalement de préférence, mais si quelqu'un essaie de s'en tenir aux principes RESTful, le chemin est pour spécifier une ressource unique ou un ensemble complet de ressources applicables/traversant la hiérarchie, puis les paramètres de requête servent à filtrer davantage les ressources pointées par votre URL via leurs attributs. Vous avez raison? Pour l'instant, je pense que je vais finir mon projet sans API RESTful et continuer à tout gérer en interne juste pour l'expédier, puis je peux ajouter DRF et configurer une API publique appropriée, et déprécier les anciennes méthodes. – gucciferXCIV

+0

Oui, je pense que c'est vrai. Les paramètres de requête ne sont pas seulement pour le filtrage; Vous pouvez également trier et renvoyer les ressources de différentes manières en fonction de vos besoins. Assurez-vous de ne pas envoyer de noms d'utilisateur et de mots de passe en tant que paramètres de requête;) – slider

+0

Pas de mots de passe en clair dans une URL? Pourquoi pas?! haha, merci encore! Je vais accepter votre réponse, mais si quelqu'un d'autre a des éclaircissements sur la raison pour laquelle Django semble favoriser les paramètres de chemin sur les paramètres de requête, je serais intéressé de le découvrir. – gucciferXCIV