武裝你的WEBAPI-OData入門

本文屬於OData系列html

目錄(可能會有後續修改)前端

  • 武裝你的WEBAPI-OData入門
  • 武裝你的WEBAPI-OData便捷查詢
  • 武裝你的WEBAPI-OData分頁查詢
  • 武裝你的WEBAPI-OData資源更新
  • 武裝你的WEBAPI-OData之EDM
  • 武裝你的WEBAPI-OData格式轉換
  • 武裝你的WEBAPI-OData使用Endpoint

EDM EDEDM EDM EDEDM!git

前陣子刷抖音,隔幾個就是這個,被洗腦了,本着閒着也是閒着的心態,我決定一探究竟,唱的究竟是個啥。github

探索

網上找了一下,發現這個:EDM is short for Entity Data Model.shell

看到這個我就驚了,這不就是OData的數據模型嘛,我去,他們還挺有極客精神。想到前陣子也用OData來着,就簡單寫寫相關的內容吧。數據庫

OData簡介

什麼是OData?c#

OData(Open Data Protocol)是一個開源的開放協議(OASIS標準)的技術,開發者能夠經過它向用戶提供可查詢的API。(官方網站後端

很籠統,咱們直接看這個玩意能夠幹什麼:api

  • 客戶端能夠經過請求自行設計查詢,不須要和後端溝通具體查詢參數、接口等信息,節省了大量的溝通成本和時間成本。
  • 數據的篩選是在服務端完成的,不須要客戶端一次性請求全部數據並在前端篩選,大大提高了效率。
  • 支持數據的定製,能夠選擇數據的多個維度。
  • 結合EF等ORM技術,數據能夠直接經過數據庫查詢得到,效率更高。
  • 輕鬆實現分頁查詢
  • 符合RESTful

很是有吸引力,若是後端寫好接口,前端本身去選數據了,想幹啥幹啥,別找我要傳參查詢,世界多美好。app

這個東西見的很少,可是確實在不少地方用到,例如SharePoint、Microsoft Graph等等,沒錯你猜對了,這東西就是微軟和SAP出的,2007年就有了。SAP也用了不少這個,不少資料都是他們寫的。和這個東西相似的有一個GraphQL,沒研究過。

  • 官方的口號是OData - the best way to REST

方法

直接看看應該怎麼用吧,首先你須要有一個現成的API。

安裝Nuget包

Install-Package Microsoft.AspNetCore.OData

設置Startup.cs

須要在ConfigureServices裏面增長

services.AddOData();

在Configure裏面增長

app.UseMvc(routeBuilder => {

     routeBuilder.EnableDependencyInjection();
	 //啓用EXPAND/SELECT/ORDERBY/FILTER語法支持
     routeBuilder.Expand().Select().OrderBy().Filter();

});

而後在API的方法上面添加[EnableQuery]這個內容就好了。

[HttpGet]
[EnableQuery]
public IEnumerable<Student> GetStudents()
{
    return this.context.Students;
}

簡單使用

部署好了以後,就可使用GET請求來請求數據了。

Select查詢

api/students?$select=Name

上面的請求將只返回學生的姓名,別的就不返回了,這樣可以減小大量的數據。

Filter過濾

api/students?$filter=Name eq 'Todd'

上面的查詢返回student用戶名爲Todd的記錄。

api/students?filter=Score gt 100

上面的查詢返回Score大於100的學生的記錄。

OrderBy排序

api/students?$orderby=Score desc

上面的查詢返回按照Score進行降序排序的記錄。

總結

OData使得客戶端的查詢變得極其方便,本文只是開篇,還有不少更方便的特性,之後再講。

官方示例項目:https://github.com/hassanhabib/ODataDemo

參考資料

相關文章
相關標籤/搜索