簡體   English   中英

如何使用REST API實現復雜查詢?

[英]How to implement complex queries with a REST api?

我正在使用ember-data構建一個EmberJS應用程序。

我的應用程序中的某些功能需要非常復雜的查詢。

舉個例子,假設我有三個實體 - 學生,老師和班級。 如果我想得到1993年之前出生的所有在X老師上課的學生的名單,我怎么能用RESTful api做到這一點? 在簡單的SQL中,它很容易,但我不確定在我的API中實現它的最佳實踐。

我是否需要與基本的REST API一起構建自定義端點?

所以我還有:

GET /students (which returns all the students)
GET /students/{id} (which returns a specific student)
etc

但是為我的“自定義”查詢實現以下內容:

GET /students/custom/born_before/{date}/taught_by/{teacher_id}

或者有更標准化的方法嗎?

你可以改變你的

GET /students/custom/born_before/{date}/taught_by/{teacher_id}

GET /students/?born_before={date}&taught_by={teacher_id}

這只是一個“按示例查詢”選項:您可以使用提供的字段填充模型實例並使用它們進行查詢。 字段越少,搜索范圍越廣,顯示的結果越多。

例如,這就是JIRA API的工作方式。

一種選擇是在學生上設置一個可以發布的搜索終結點。

所以你可能有:

POST /students/filter

您發布POST的過濾器對象如下所示:

{ BornBefore:1993, TaughtBy:123 }

我還看到了一個選項,而不是發布,API有一個過濾器,然后使用查詢字符串。

我自己更喜歡第一個。 特別是如果它可以是一個長時間運行的進程,因為你的POST可以返回一個ID和/或rel鏈接到API調用,客戶端應該使用它來獲取狀態更新並獲得結果。

那么你就是POST /Students/filter ,它會用/Students/Filter/123 rel回復,你的客戶會在/Students/Filter/123上定期GET直到得到結果對象。 當然,對於簡單的簡短查詢,您可以立即返回結果。 但是,如果它需要一兩秒鍾,你可以走這條路。

O'Reilly的這本書提供了有關構建ReSTful API的一些很好的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM