2017-10-20 8 views
2

私は少し時間をかけて見てきましたが、違いを感じることさえ見つけられないようです。タイトルが述べるように、私はあなたのデータをURLパスのパラメータを使って/content/7のようにあなたのurls.pyで正規表現を使用して取得し、/content?num=7のようなクエリパラメータから取得することを試みています。request.GET.get()が実際に作成します。URLパスのパラメータとDjangoのクエリのパラメータ

それぞれの長所と短所は何か、また、他のものより明らかに優れた選択肢があるシナリオはありますか?

また、(Djangoの)優先メソッドは、正規表現でurl path paramsを使用しているようです。潜在的にきれいなURL以外の理由はありますか?トピックに関連する追加情報はすべて歓迎します。

+1

あなたはあなたの質問に言い換える必要があります:URLパラメータとクエリパラメータは同じものです。パスパラメータ(urlパラメータではなく)を意味します。 – dirkgroten

答えて

1

これは、あなたが遵守したいアーキテクチャパターンに依存します。たとえば、RESTアーキテクチャー・パターン(最も一般的であると主張できる)に従って、照会パラメーターなしで、アプリケーションの名詞におおよそ対応する「リソース」を指すように設計し、HTTP動詞に対応させるそのリソースに対して実行できるアクションたとえば、アプリケーションがユーザーを持っている、場合

、あなたは、このようなURLをデザインしたいと思う:

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 

あなたはそのリソースでのユーザーのセットをフィルタリングするために、クエリのparamsを使用することができます。例えば、アクティブなユーザーを取得するには、あなたのURLだから要約する

/users?active=true 

ようになり、クエリが対パスをparamsはのparamsあなたの建築の好みに依存します。

RESTの詳細な説明:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api

ロイフィールディングのバージョンをあなたが本当に学術取得したい場合:http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

+0

したがって、一般的なシナリオ(非RESTともいう)では、優先順位がほとんど下がりますが、誰かがRESTfulな原則に固執しようとしている場合、そのパスは単一のリソースまたは適用可能なリソースの完全なセットを指定する/クエリパラメータは、その属性によってURLが指すリソースをさらにフィルタリングするためのものです。いいね?今のところ、私はRESTfulなAPIを使わずにプロジェクトを完成させ、出荷するために内部的にすべての処理を続けると思います。その後DRFを追加して適切なパブリックAPIを設定し、古いメソッドを廃止することができます。 – gucciferXCIV

+0

はい、そうだと思います。クエリパラメータはフィルタリングのためだけではありません。要件に応じてさまざまな方法でリソースをソートして返すこともできます。ユーザー名とパスワードをクエリパラメータとして送信しないようにしてください; – slider

+0

URLに平文のパスワードはありませんか?何故なの?!ハハ、もう一度ありがとう!私はあなたの答えを受け入れるでしょうが、Djangoがクエリパラメータよりもパスパラメータを好んでいるように見える理由について他の誰かが解明しているなら、私は調べることに興味があります。 – gucciferXCIV

関連する問題