天天看點

Contact Manager Web API 示例[1]CRUD 操作

1、crud操作: curd 是 "create, read, update, delete" (新增、讀取、更新、删除) 的簡寫,這四個動作是資料庫基本操作。

Contact Manager Web API 示例[1]CRUD 操作

http 方法

http 主要方法 (get, put, post, delete) 能對應到 curd 操作:

get 接收及顯示。get 在伺服器應該沒有副作用。

put 更新。put 也能拿來"新增"使用,如果伺服器允許 client 去指定新的 uri。那範例的聯系人管理将不允許使用 put 來新增。

post 新增。伺服器會給 uri 配置設定新對象,然後傳回此 uri 作為響應消息的一部分。

delete 删除。

新增資源

在 asp.net web api,你能在 model 使用強型别 clr 對象,他們将會自動序列化為 xml 或 json 給 client。在model 目錄的 contact 類:

使用倉儲模式( repository pattern)

我們的 http service 需要儲存聯系人清單,此範例,聯系人清單會儲存在記憶體( list(of t ) )。使用 repository pattern 會讓此對象從我們的 service 實作中切割出來。在 model 目錄,新增一個 interface 接口,名稱 icontactrepository.cs

以上定義出我們需要的 crud 相關功能接口,然後一樣在 model 目錄下新增一個新的類檔案,類檔案 "contactrepository.cs",此類将實作 icontactrepository 接口。以下為相關實作:

實作沒有什麼難處,要處理都是 list(of contact) 所提供的 .add(), .remove(), .find() 以進行相關新增、删除、查詢動作。另外,還利用 linq 的 .asqueryable() 來将 list 型别轉換,才有辦法以 iqueryable() 來回傳。以上利用 list 來仿真資料庫,或者說,把 list 想象成記憶體裡的資料庫。

web api controller(contactscontroller)

contactscontroller是 http service 的程式代碼,注意命名開始要對應到 http method,主要就是約定勝于配置理念。“約定”即規則。規則是預先定義的,工程師隻需要按着規則來做事,就不需要額外的“配置”。當然也可以不對應,通過httpmothod打标簽也可以的。

取得資源

取得資源是 read 與 get 的對應關系。在聯系人管理中提供了二個 action,一個是讀取所有聯系人,一個是通過 id 來取得聯系人。這兩個 action 都定義在 http get 方法,記得方法必須以 "get..." 開頭。

· get /api/contacts

· get /api/contacts/id

新增資源是 create 與 post 的對應關系。要新增一位聯系人,client 送出一個 http post 請求,請求資訊包含新聯系人的相關内容。記得方法必須以 "post..." 開頭。

預設從請求主體(request body)來而的參數解序列化後是複合(complex)類型。是以,我們預期 client 傳送給我們的是一個經序列化表現的聯系人對象,使用 xml 或 json 來序列化。以上的實作考慮到兩件事:

· response code

預設,web api framework 設定回傳狀态代碼(status code)為 200 (ok)。但按照 http/1.1 協定,當一個 post 請求會導緻資源的建立,伺服器應該響應的狀态代碼為 201 (created)。

· location當伺服器新增一個資源,它應該在響應的 location header 中包含新資源的 uri。

注意傳回類型是 httpresponsemessage(of contact),httpresponsemessage(of t) 型别是一個用強類型表示的 http 響應消息。泛型參數 t 會取得 clr 型别然後序列化到資訊主體。

更新資源

更新資源是 update 與 put 的對應關系。更新聯系人作法相當直覺,記得方法必須以 "put..." 開頭。

方法中有二個參教,聯系人 id 與 更新的聯系人資料。id 參數會從 uri 路徑取得,聯系人參數是從請求主體解串行化而來。預設,asp.net web api framework 會從請求主體 (request body)裡的 route 與 複合(complex) 型别來取得簡易的參數類型。

删除資源

删除資源是 delete 與 delete 的對應關系。

依據 http 規範,delete 方法必須是 idmpotent(幂等),意味着幾個相同 uri 的删除請求必須和一個删除請求有相同效果。是以,如果聯系人已經被删除,方法應該不能回傳錯誤碼。

如果 delete 請求成功,你能回傳狀态 200 (ok) 描述該實體主體(即要删除的主體)的狀态,或如果删除持續未處理回傳狀态 202 (accepted) ,或沒有實體主體回傳狀态 204 (no content)。我們範例會傳回狀态 204 (no content)。

crud 操作總結

在使用 asp.net web api framework 時,你能發現與 http/1.1 規範有很大關連性,以前較很少關心與了解的内容,例如,put、delete、post的處理,以及狀态代碼的處理等,現在變成要開注意的幾個點。

本文來自雲栖社群合作夥伴“donet跨平台”,了解相關資訊可以關注“opendotnet”微信公衆号

繼續閱讀