web-dev-qa-db-ja.com

pathParamsまたはQueryParamsを使用する場合

クエリパラメータを使用する必要がある場合と、URLにパスパラメータを使用する場合の経験則はありますか?

たとえば、company(PK)、InvoiceNo(PK)、Invoiceline、invoiceValue、noOfLines、salesPersonというフィールドを持つテーブルInvoiceがあるとします。

私の現在の考えでは、あなたのURLは

/Invoice/

すべての請求書が表示されます

/Invoice/{company}

これにより、会社のすべての請求書が表示されます。

/Invoice/{company}/{InvoiceNo}

その特定の請求書を表示し、

/Invoice/{company}/{InvoiceNo}?invoiceLineNo=23

行23のみを表示します。

私の考えでは、主キーフィールドはパスの一部である必要があり、フィルターにかける他のフィールドはクエリパラメーターの一部であるということです。

これは2つを区別する合理的な方法のように聞こえますか?

31
Tim Sparg

PathParamが要求しているエンティティタイプに至るという私の個人的な経験則。

/Invoices             // all invoices
/Invoices?after=2011  // a filter on all invoices

/Invoices/52          // by 52
/Invoices/52/Items    // all items on invoice 52
/Invoices/52/Items/1  // Item 1 from invoice 52

/Companies/{company}/Invoices?sort=Date
/Companies/{company}/Invoices/{invoiceNo} // assuming that the invoice only unq by company?

引用するには Mr Roweデータをグループ化するためのパスパラメータ、フィルタリングのためのクエリパラメータ

49
Gareth Davis

Garethの答えに追加するだけで、オプションのパラメーターもクエリパラメーターとして配置する方が簡単です。通常、どちらが最良のオプションであるかは、サーバーフレームワークの制約によって決まります。パラメータがクエリパラメータとパスパラメータのどちらであるかを意味的に重要視しすぎることは、実際には賢明ではありません。 URIはクライアントに対して不透明です。

6
Darrel Miller