2013-04-08 85 views
0

一些通用設計問題:一些一般寧靜的API設計問題

  1. 給這裏的例子:

https://developers.google.com/+/api/latest/activities/list#nextPageToken

爲什麼會在服務器返回一個令牌中檢索下一個分頁結果?這是否違背了無國籍的想法?

爲什麼不只是傳遞一個像LIMIT name = value這樣的MySQL作爲參數呢?服務器現在必須返回我想要的頁數...我錯過了什麼?

  • 我讀許多但這一次是感興趣的:
  • REST Web Services API Design

    第二回復,提供以下實施例。

    GET http://api.domain.com/user/<id> 
    GET http://api.domain.com/users 
    PUT http://api.domain.com/user/<id> 
    POST http://api.domain.com/users 
    DELETE http://api.domain.com/user/<id> 
    

    有道理但爲什麼有兩個複數資源?難道不能假定如果「用戶」被查詢並且是NULL或者沒有提供「全部」意圖?同樣適用於POST?如果複數是爲了提高可讀性 - 爲什麼沒有DELETE的「用戶」資源?

    最終,我理解REST意味着...單個資源的表示 - 使用HTTP動詞(GET,PUT,POST,DELETE)基本上管理資源 - 類似於CRUD。

    編輯|最後,我還想問一問,爲什麼Google API會在URI中發送API版本而不是使用HTTP頭?有理由嗎?爲了向後兼容舊客戶端?

    評論?

    +0

    [REST API架構 - 最佳實踐](http://dasunhegoda.com/rest-api-architecture-best-practices/1049/) – Techie 2015-11-18 17:13:16

    回答

    1

    爲什麼服務器返回一個令牌來檢索下一個分頁結果?這是否違背了無國籍的想法?

    對分頁結果集使用這種機制是完全標準化的,不會打破無狀態的想法。考慮下面的例子。

    假設GET /users?after=<after>(其中after是可選的)應該以分頁方式返回所有用戶的列表,比如每頁顯示< = 4。

    客戶端發出的第一個請求爲GET /users,其響應可能如下所示(格式爲JSON)。

    { 
        "users": [ "alex", "bob", "carter", "dan" ] 
        "more_after": "dan" 
    } 
    

    在這個例子中,more_after屬性指定,可以有更多的用戶留在用戶列表中。因此,客戶請求GET /users?after=dan並得到如下所示的第二個響應。

    { 
        "users": [ "edward", "frank" ] 
    } 
    

    缺少more_after屬性表示這是用戶的最後一頁。

    現在的問題是:用作頁面分隔符的「dan」令牌是否會打破我們想要的「無狀態」屬性?很明顯,答案是否定的。服務器不必記住兩個GET請求之間的任何內容。沒有會話的概念。任何需要堅持在兩個GET請求之間的狀態僅存在於客戶端 - 這是重要的區別。這是完全可以接受的 - 而且通常是要求 - 讓客戶端在服務調用之間保持狀態。

    +0

    感謝您的快速回復:) – 2013-04-08 03:08:54

    +0

    我遺漏的一件事是,當服務器得到一個'GET/users?after = dan'請求,它所做的就像'SELECT username FROM users WHERE username>「dan」ORDER BY username LIMIT 4'。 – 2013-04-08 03:33:47

    +0

    @ Alex.Barylski您應該將問題標記爲已回答,如果是。 – 2013-09-09 15:54:43