確定第一個RESTful Web服務的需求

想象一下,一個開發人員團隊正在開發適用于iOS和Android的移動應用程序,并且需要一個RESTful Web服務來執行toys的CRUD操作。 我們確定不想使用模擬Web服務,并且不想花費時間來選擇和配置ORM(對象關系映射的簡稱)。 我們希望快速構建一個RESTful Web服務,并盡快準備好開始在移動應用程序中與它進行交互。

我們希望toys能夠存儲在數據庫中,但我們還不準備立即把它用在生產環境中。 因此,我們可以使用最簡單的關系數據庫,這樣我們就不必花太多時間執行復雜的安裝或配置。

Django REST框架(也稱為DRF)將允許我們輕松完成此任務,并開始向我們的RESTful Web服務的第一個版本發出HTTP請求。 在這種情況下,我們將使用一個非常簡單的SQLite數據庫,這是一個新的Django REST框架項目的默認數據庫。

首先,我們必須指定主要資源的要求:一個 ‘toy’。 我們需要toy實體的以下屬性或字段:

  • 整數標識符
  • 一個名字
  • 可選的描述
  • 玩具類別描述,例如動作人物,玩偶或玩具
  • 發布日期
  • 一個bool值,表示玩具是否已經在網上商店的主頁上至少一次

此外,我們希望有一個時間戳,其中包含玩具添加到數據庫表中的日期和時間。

在RESTful Web服務中,每個資源都有自己唯一的URL。 在我們的網絡服務中,每個玩具都有自己唯一的URL。

注:下面所說的http請求方法即 GET,PUT,POST,DELETE等

下表顯示了我們的第一個Web服務版本需要支持的方法,HTTP 請求方法,作用范圍和和含義。 每個方法都由HTTP 請求方法和范圍組成。 所有方法對toy和集合都有明確的含義:

HTTP verb Scope Semantics
GET Toy 請求單個數據
GET Collection of toys 取回所有存儲在數據庫中的toy數據,并根據名字按照升序排列
POST Collection of toys 創建一個新的toy
PUT Toy 更新一個已經存在的toy
DELETE Toy 刪除一個toy

在上表中,GET 出現兩次,但有兩個不同的范圍:toys 和collection of toys。 第一個顯示應用于玩具的GET,即請求單個資源。 第二行顯示應用于玩具集合的GET,即應用于資源集合的請求。

我們希望我們的Web服務能夠區分URL中集合的單個資源。 當我們引用一個集合時,我們將使用斜杠(/)作為URL的最后一個字符,如http:// localhost:8000 / toys /。 當我們引用單個資源時我們不會使用斜杠(/)作為URL的最后一個字符,如http:// localhost:8000 / toys / 5

讓我們考慮一下http:// localhost:8000 / toys /是玩具集合的URL。 如果我們在前一個URL中添加一個數字,我們會識別一個ID或主鍵等于指定數值的特定玩具。 例如,http:// localhost:8000 / toys / 42,標識了ID等于42的玩具。

POST

我們必須使用POST方法和http:// localhost:8000 / toys / request URL編寫和發送HTTP請求,以創建新toy并將其添加到toys集合中。 在此示例中,我們的RESTful Web服務將使用JSON(JavaScript Object Notation的簡稱),因此我們必須提供帶有字段名稱和值的JSON鍵值對來創建新玩具。 作為請求的結果,服務器將驗證字段的提供值,確保它是一個有效的toy,并將其保存在數據庫中。 服務器將在適當的表中插入帶有新玩具的新行,然后將返回201 Created狀態代碼和一個帶有剛剛添加成功的并且序列化為JSON的toy數據,該JSON數據包括由數據庫自動生成并分配ID和toy對象:

POST http:// localhost:8000 / toys /

GET

我們需要使用GET方法和http:// localhost:8000 / toys / {id}的請求 URL來發送HTTP請求,以檢索ID與{id}中指定數值匹配的玩具。 例如,如果我們使用請求URL http:// localhost:8000 / toys / 25,服務器將檢索ID為25的玩具。作為請求的結果,服務器將從中檢索具有指定ID的玩具。作為請求的結果,服務器將從數據庫中檢索具有指定ID的玩具,并用Python創建適當的toy對象。如果找到玩具,服務器會將toy對象序列化為JSON,返回200 OK狀態代碼,并返回帶有序列化toy對象的JSON正文。如果沒有玩具與指定的ID匹配,則服務器將僅返回404 Not Found狀態:

GET http:// localhost:8000 / toys / {id}

PUT

我們需要使用PUT方法,來編寫并發送HTTP請求,并請求URLhttp:// localhost:8000 / toys / {id},通過檢索ID與{id}中的值匹配的玩具,然后用提供的數據來替換它。此外,我們還需要提供帶有字段名稱和值的JSON鍵值對,來創建并替換現有玩具的新玩具。作為請求的結果,服務器將驗證字段的提供值,確保它是有效玩具,然后用新的數據替換匹配ID的toy。更新操作后,玩具的ID將相同。服務器將更新相應表中的現有行,它將返回200 OK狀態代碼和JSON主體如果我們沒有為新玩具提供所有必要字段,服務器將返回400 Bad Request狀態代碼。如果服務器找不到具有指定ID的玩具,則服務器將僅返回404未找到狀態:

PUT http:// localhost:8000 / toys / {id}

DELETE

我們需要使用DELETE 方法 ,來編寫并發送HTTP請求,并請求URLhttp:// localhost:8000 / toys / {id}以刪除ID與{id}中指定數字值匹配的玩具。例如,如果我們通過請求URL http:// localhost:8000 / toys / 34,服務器將刪除ID為34的玩具。作為請求的結果,服務器將從數據庫中檢索具有指定ID的玩具并在Python中創建適當的玩具對象。 如果找到玩具,服務器將請求ORM刪除與此玩具對象關聯的玩具行,并且服務器將返回204 No Content狀態代碼。 如果沒有玩具與指定的ID匹配,則服務器將僅返回404 Not Found狀態:

DELETE http:// localhost:8000 / toys / {id}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容