1

GET を使用してクエリ文字列パラメーターを公開する場合、次のベース URL があります。

https://school.service.com/api/students

これにより、最初の 25 人の学生が返されます。

次の基準の 1 つに基づいて学生のリストを返したい場合はどうすればよいでしょうか。

* have accepted a job
* have received a job offer
* have no job offers

上記の 3 つの選択肢は、本質的に列挙型です。

したがって、求人のない学生に対するクエリ リクエストは次のようになります。

https://school.service.com/api/students?jobOfferStatus=3

ただし、 jobOfferStatus=3 がこれを処理する適切な方法であるかどうか疑問に思っています。その場合、その jobOfferStatus クエリ パラメータで使用可能なオプションのリストをクライアントに公開/提供するにはどうすればよいですか? 他の可能なクエリ パラメータとその有効なオプションについてはどうですか? このような多くの可能なクエリ パラメータがあります。

これを適切に行う方法の例を見てみたいです。ベストプラクティスは何ですか?

4

2 に答える 2

2

主なオプションは 2 つあります。文書化するか、発見可能にするかです。多くの API には、参照用にすべてのリソースとパラメーターをリストしたドキュメントがあります。そうしないと、クライアントはわかりません。

応答にオプションを含めることで、何らかの方法で検出可能にすることもできます。これに関する規則については、HATEOAS をまだ検索していない場合は検索してください。(私自身、HATEOAS について提案できるほどの知識はありません。)

「3」は jobOfferStatus にとってあまり意味のある値ではなく、クライアントがその数値を知る必要はないことを述べておきます。好きなように設定できます -- jobOfferStatus=none または jobOffer=none です。コントローラーは、その値を列挙に一致させる作業を行うことができます。インターフェースを開発者にとって直観的に設計するようにしてください (もちろん、適切なドキュメントを作成してください)。

複数のクエリ パラメーターを処理するには、関数でオプションのパラメーターを使用できます。

public HttpResponseMessage GetStudents(string jobOffer = "",
                                        string other1 = "",
                                        string other2 = "") 
{
    if (jobOffer == "accepted" && other2 == "whatever") {
        // return a response
    }
    else {
        // return a different response
    }
}

クライアントがこれらの名前でパラメーターを使用する場合、応答を適切に調整できます。

于 2013-11-11T21:13:33.017 に答える
0

これを行うにはいくつかのオプションがあります。

Get1) asp.net Web API への一般的なルートを構成します。クラスでget メソッドとは異なる別のアクションの名前を解決する方法を知っていますApp_Start\WebConfigApi.cs。これを追加してみてください。

config.Routes.MapHttpRoute("DefaultApiWithActionAndId",
            "api/{controller}/{action}/{id}",
            new { id = RouteParameter.Optional });

これを使用すると、API コントローラーでさまざまなメソッドを使用できます。

// request: get
// url: api/Students/GetStudents
public HttpResponseMessage GetStudents() 
{
   return Request.CreateResponse(...);
}

// request: get    
// url: api/Students/GetStudentsWithJobOffer
public HttpResponseMessage GetStudentsWithJobOffer() 
{
   return Request.CreateResponse(...);
}

// request: get    
// url: api/Students/GetStudentsAcceptedJob
public HttpResponseMessage GetStudentsAcceptedJob() 
{
   return Request.CreateResponse(...);
}

2)Getメソッドで単純なパラメーターを使用します。

// request: get
// url: api/Students?jobOfferStatus=1       
public HttpResponseMessage GetStudents(int jobOfferStatus) 
{
    // use jobOfferStatus parameter to fill some list
   return Request.CreateResponse(...);
}

3) という名前のパラメーターを含む単純なメソッドを使用して、idasp.net mvc Web API によって既定のフレンドリ URL を取得します。

// request: get
// url: api/Students/1      
public HttpResponseMessage GetStudents(int id) 
{
    // use the id parameter to fill some list
   return Request.CreateResponse(...);
}
于 2013-11-11T10:27:13.907 に答える