[英]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.