国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OData WebAPI實(shí)踐-兼容OData集合響應(yīng)

這篇具有很好參考價(jià)值的文章主要介紹了OData WebAPI實(shí)踐-兼容OData集合響應(yīng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文屬于 OData 系列文章

引言

OData 是一個(gè)開放標(biāo)準(zhǔn),已經(jīng)在 oasis 組織標(biāo)準(zhǔn)化,因此我們可以在標(biāo)準(zhǔn)的官網(wǎng)查詢到 OData 的標(biāo)準(zhǔn)請(qǐng)求與返回形式:OData JSON Format Version 4.01 (oasis-open.org)

針對(duì)不同的數(shù)據(jù)類型,輸出返回的格式也不盡相同,涉及的內(nèi)容非常多。日常使用 OData 的過程中,我們經(jīng)常處理的是實(shí)體對(duì)象以及實(shí)體對(duì)象的集合。如果直接返回 IQueryable 用于 OData 查詢,那么返回的數(shù)據(jù)大多是集合(數(shù)組/列表)。

{
????"@odata.context":?"http://localhost:9000/api/v2/$metadata#Collection(Datum_AggDto)",
????"@odata.count":?2,
????"value":?[
????????{
????????????"timestamp":?1682294400000,
????????????"max":?180.0,
????????????"min":?152.0,
????????????"avg":?161.7605633802817
????????},
????????{
????????????"timestamp":?1682985600000,
????????????"max":?281.0,
????????????"min":?180.0,
????????????"avg":?228.39583333333334
????????}]
}

這個(gè)數(shù)組對(duì)象也不是很純粹,它被 value 封裝,并且提供了 @odata.context 元數(shù)據(jù)鏈接。如果我們的 API 沒有被 OData 路由解析,那么默認(rèn) WEBAPI 會(huì)返回一個(gè)純粹的數(shù)組對(duì)象:

[
{
	"timestamp":?1682294400000,
	"max":?180.0,
	"min":?152.0,
	"avg":?161.7605633802817
},
{
	"timestamp":?1682985600000,
	"max":?281.0,
	"min":?180.0,
	"avg":?228.39583333333334
}]

假設(shè)我們的對(duì)外的數(shù)據(jù)接口不完全被 OData 路由,會(huì)導(dǎo)致前端訪問的行為不一致:一些 API 可以直接解析,另外一些 API 則需要使用 value 封裝后處理。

封裝非 OData Route Mapping

由于 OData 有了標(biāo)準(zhǔn),為了對(duì)外保持一致性,我們可以嘗試在返回非 OData 路由 API 時(shí),將原始數(shù)組對(duì)象進(jìn)行封裝。

單實(shí)體對(duì)象

        [HttpGet("/api/v1/Current")]
        [ProducesResponseType(typeof(DeviceDataDto), Status200OK)]
        public IActionResult Current(string key)
        {
            key = key.Trim('\'');
            var data = _context.DeviceData.Where(w => w.DeviceId == key).OrderByDescending(w => w.Timestamp).FirstOrDefault();

            return Ok(_mapper.Map<DeviceDataDto>(datas));
        }

對(duì)于以上的代碼,只返回單個(gè)實(shí)體對(duì)象,返回的形式與 OData 標(biāo)準(zhǔn)中返回單個(gè)實(shí)體對(duì)象的標(biāo)準(zhǔn)一致,因此不需要額外的轉(zhuǎn)換操作。

{
	//OData 返回會(huì)多一個(gè)context,普通API不會(huì)有。
	"@odata.context":?"http://localhost:9000/api/v2/$metadata#Datum_AggDto",
	"timestamp":?1682985600000,
	"max":?281.0,
	"min":?180.0,
	"avg":?228.39583333333334
}

實(shí)體對(duì)象集合

        [HttpGet("/api/v1")]
        [ProducesResponseType(typeof(IEnumerable<DeviceDataDto>), Status200OK)]
        public async Task<IActionResult> Get(string key)
        {
            key = key.Trim('\'');
            return Ok(await _context.DeviceData.Where(w => w.DeviceId == key).ToListAsync());
        }

以上代碼返回的類型是一個(gè)集合,并且被 OData 路由映射。我們使用 value 這個(gè) key 對(duì)齊進(jìn)行封裝:

        [HttpGet("/api/v1")]
        [ProducesResponseType(typeof(IEnumerable<DeviceDataDto>), Status200OK)]
        public async Task<IActionResult> Get(string key)
        {
            key = key.Trim('\'');
            var datas = await _context.DeviceData.Where(w => w.DeviceId == key).ToListAsync();

            var result = new { Value = datas };
            return Ok(result);
        }

注意這個(gè) Value 我使用的是大寫,由于我啟用了 camelCase,所以會(huì)自動(dòng)轉(zhuǎn)換為小寫。這樣前端訪問 API 時(shí),不論是否為 OData API 都可以訪問 value 的值獲取數(shù)組對(duì)象。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-445308.html

到了這里,關(guān)于OData WebAPI實(shí)踐-兼容OData集合響應(yīng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 武裝你的WEBAPI-OData與DTO

    本文屬于OData系列文章 前面寫了很多有關(guān)OData使用的文章,很多讀者會(huì)有疑問,直接將實(shí)體對(duì)象暴露給最終用戶會(huì)不會(huì)有風(fēng)險(xiǎn)?$expand在默認(rèn)配置的情況下,數(shù)據(jù)會(huì)不會(huì)有泄露風(fēng)險(xiǎn)? 答案是肯定的,由于OData的特性,提供給我們便捷同時(shí)也會(huì)帶來(lái)一些風(fēng)險(xiǎn)。很多地方推薦使用

    2024年02月03日
    瀏覽(20)
  • 武裝你的WEBAPI-OData之API版本管理

    武裝你的WEBAPI-OData之API版本管理

    本文屬于OData系列 對(duì)外提供WEBAPI時(shí),如果遇上了版本升級(jí),那么控制WEBAPI的版本也是非常必要的。OData官方提供了版本控制以及管理的解決方案,我個(gè)人是實(shí)踐體會(huì)是 不好用 ,好在社區(qū)提供了對(duì)應(yīng)的nuget包,與.NET主版本同步更新。 ASP.NET API Versioning是一個(gè)提供ASP.NET WEBAPI版本

    2024年02月03日
    瀏覽(15)
  • uniapp富文本文字長(zhǎng)按選中(用于復(fù)制,兼容H5、APP、小程序三端)

    uniapp富文本文字長(zhǎng)按選中(用于復(fù)制,兼容H5、APP、小程序三端)

    方案:使用u-parse的selectable屬性 u-parse :selectable=\\\"true\\\" :html=\\\"content\\\"/u-parse 注意:u-parse直接使用是不兼容小程序的,需要對(duì)u-parse進(jìn)行改造: 1. 查看u-parse源碼發(fā)現(xiàn)小程序走到以下邏輯:(沒有傳入selectable屬性,需要將selectable傳入trees組件) 改造前: ?改造后: 2. 進(jìn)入trees組件,

    2024年02月20日
    瀏覽(97)
  • 并查集模板-兩個(gè)操作:合并集合和查詢兩個(gè)元素是否屬于同一個(gè)集合

    并查集模板-兩個(gè)操作:合并集合和查詢兩個(gè)元素是否屬于同一個(gè)集合

    836. 合并集合 一共有?nn?個(gè)數(shù),編號(hào)是? 1~n 1~n,最開始每個(gè)數(shù)各自在一個(gè)集合中。 現(xiàn)在要進(jìn)行?mm?個(gè)操作, 操作共有兩種 : M a b ,將編號(hào)為?aa?和?bb?的 兩個(gè)數(shù)所在的集合合并 ,如果兩個(gè)數(shù)已經(jīng)在同一個(gè)集合中,則忽略這個(gè)操作; Q a b , 詢問編號(hào)為?aa?和?bb?的兩個(gè)

    2024年02月13日
    瀏覽(89)
  • 面試題更新之-什么是響應(yīng)式設(shè)計(jì)?響應(yīng)式設(shè)計(jì)的基本原理是什么?如何兼容低版本的IE?css實(shí)現(xiàn)響應(yīng)式設(shè)計(jì)的方案

    面試題更新之-什么是響應(yīng)式設(shè)計(jì)?響應(yīng)式設(shè)計(jì)的基本原理是什么?如何兼容低版本的IE?css實(shí)現(xiàn)響應(yīng)式設(shè)計(jì)的方案

    響應(yīng)式設(shè)計(jì)(Responsive Design)是一種網(wǎng)頁(yè)設(shè)計(jì)和開發(fā)的方法,旨在使網(wǎng)站能夠在不同設(shè)備、屏幕尺寸和窗口大小下提供最佳的用戶體驗(yàn)。 傳統(tǒng)的網(wǎng)頁(yè)設(shè)計(jì)通常針對(duì)特定的屏幕尺寸進(jìn)行布局和樣式定義,這導(dǎo)致在不同設(shè)備上瀏覽同一個(gè)網(wǎng)站時(shí)會(huì)出現(xiàn)排版錯(cuò)亂、內(nèi)容溢出或者字體

    2024年02月16日
    瀏覽(31)
  • 響應(yīng)式web-PC端web與移動(dòng)端web(H5)兼容適配 選型方案

    響應(yīng)式web-PC端web與移動(dòng)端web(H5)兼容適配 選型方案

    背景 項(xiàng)目需要,公司已經(jīng)有一套PC端web,需要做一套手機(jī)端瀏覽器可用的,但是又想兼容pc端,適配的web項(xiàng)目。 以下是查閱到響應(yīng)布局現(xiàn)成的開源模版。根據(jù)自己技術(shù)棧,vue2,js來(lái)搜索相關(guān)的開源項(xiàng)目。 使用若依快速構(gòu)建web應(yīng)用程序,有單獨(dú)的移動(dòng)端項(xiàng)目。 RuoYi 是一個(gè) Java

    2024年02月05日
    瀏覽(35)
  • [toolschain] 怎么運(yùn)用git 嵌套git 管理(子文件夾中也有個(gè)git) 并且如何簡(jiǎn)單設(shè)置使用repo的筆記 本文是求助GPT的記錄 實(shí)踐有用

    [toolschain] 怎么運(yùn)用git 嵌套git 管理(子文件夾中也有個(gè)git) 并且如何簡(jiǎn)單設(shè)置使用repo的筆記 本文是求助GPT的記錄 實(shí)踐有用

    Q:一個(gè)文件夾a,a中的文件被a中的git 1管理,同時(shí)與a平級(jí)有一個(gè)git2,怎么讓git 也能管理到git1 的內(nèi)容 A:如果你想讓一個(gè) Git 倉(cāng)庫(kù)(git2)也能管理另一個(gè) Git 倉(cāng)庫(kù)(git1)的內(nèi)容,你可以使用 Git 的子模塊(submodule)功能。子模塊允許一個(gè) Git 倉(cāng)庫(kù)包含另一個(gè) Git 倉(cāng)庫(kù),使得你可

    2024年02月04日
    瀏覽(20)
  • elasaticsearch新版java客戶端ElasticsearchClient詳細(xì)教程,支持響應(yīng)式編程,Lambda表達(dá)式,兼容舊版High Level Rest Client

    elasaticsearch新版java客戶端詳細(xì)教程,支持響應(yīng)式編程,Lambda表達(dá)式。兼容舊版High Level Rest Client。網(wǎng)上相關(guān)教程少,我在這里出一個(gè)。elasaticsearch相關(guān)安裝這里不介紹了 有幾種方式,這里介紹兩種,如果不考慮之前舊版High Level Rest Client的客戶端采用第一種就行 阻塞和異步客戶

    2023年04月15日
    瀏覽(19)
  • HTML5字體集合的實(shí)踐經(jīng)驗(yàn)

    隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)站已成為人們獲取信息和交流的重要平臺(tái)。而一個(gè)好的網(wǎng)站,不僅需要有美觀的界面,還需要有良好的用戶體驗(yàn)。其中,字體是影響用戶體驗(yàn)的一個(gè)重要因素。下面就讓我們來(lái)看看HTML字體集合的相關(guān)內(nèi)容。 HTML字體集合是指在HTML網(wǎng)頁(yè)中所使用的字體集合

    2024年02月02日
    瀏覽(18)
  • 解決Cadence 17.4軟件無(wú)法啟動(dòng),capture cis啟動(dòng)緩慢,打開項(xiàng)目緩慢,allegro 打開程序未響應(yīng)(即使微軟拼音切換兼容模式也無(wú)法解決的情況)

    解決Cadence 17.4軟件無(wú)法啟動(dòng),capture cis啟動(dòng)緩慢,打開項(xiàng)目緩慢,allegro 打開程序未響應(yīng)(即使微軟拼音切換兼容模式也無(wú)法解決的情況)

    該問題并非和諧軟件的問題 而是Cadence 授權(quán)驗(yàn)證機(jī)制導(dǎo)致,正常情況如果剛安裝完的新系統(tǒng)不會(huì)出現(xiàn),單很多情況下工程師使用的電腦有多網(wǎng)卡或多虛擬網(wǎng)卡 導(dǎo)致軟件難以訪問授權(quán)端口,至使軟件無(wú)法正常啟動(dòng) 解決方案: 在高級(jí)網(wǎng)絡(luò)設(shè)置里,先禁用掉所有網(wǎng)卡,然后從本地

    2024年02月17日
    瀏覽(135)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包