日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HATEOAS的RESTful服务。 记录超媒体API

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HATEOAS的RESTful服务。 记录超媒体API 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.簡介

希望本教程的前一部分不僅揭示了超媒體和HATEOAS的深遠影響,而且使我們確信這些都是RESTful Web服務和API的基本構建塊。 在這一部分中,我們將繼續側重于文檔方面,以解決如何預先傳遞Web服務或API功能的問題。

目錄

1.簡介 2. OpenAPI和朋友 3. OpenAPI不是答案,現在呢?
3.1。 應用程序級配置文件語義(ALPS) 3.2。 ALPS與JSON-LD,... 3.3。 JSON超模式 3.4。 微格式 3.5。 都柏林核心元數據計劃(DCMI)
4。結論 5.下一步是什么

在進一步介紹之前,讓我們根據REST體系結構樣式從服務提供者和服務使用者的角度詳細說明手頭的問題。 本質上, 超媒體驅動的Web服務和API的可發現性方面允許服務提供者發布單個URL,入口點并以此完成。 另一方面,任何意識到超媒體的消費者都應該能夠使用上下文鏈接瀏覽資源,并在必要時沿途完成任何所需的狀態修改。 唯一的前提條件是提供者和消費者應該說相同的超媒體方言 。 這是關于提供者/消費者交互的機器角度,這是探索性客戶端的示例。

現在,讓我們從開發人員的角度來看這個問題。 您將如何知道特定資源的屬性? 您如何知道期望使用哪種類型的鏈接和鏈接關系? 它支持的行動或能力如何? 它們可能導致什么副作用? 最后,作為開發人員,您只需要滿足一個簡單的要求,例如“客戶C希望將其預訂R再延長一周”。 這是人類對提供者/消費者交互的觀點。

很多具有挑戰性的問題,但是我們有答案嗎? 讓我們找出……

2. OpenAPI和朋友

如今,如果我們研究推薦記錄RESTful Web服務和API的推薦方法是什么,那么您無疑會遇到OpenAPI規范 。 規范有多個版本,但在撰寫本文時,最新版本是3.0.2 。

OpenAPI規范 ( OAS )為RESTful API定義了一個與語言無關的標準接口,使人類和計算機都可以發現和理解服務的功能,而無需訪問源代碼,文檔或通過網絡流量檢查。 正確定義后,使用者可以使用最少的實現邏輯來理解遠程服務并與之交互。

https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md

公平地說, OpenAPI是一個很好的規范,它是許多組織和個人出色的協作成果的結果。 它已被廣泛認為是記錄RESTful Web服務和API的首選方法,但它并不是唯一的方法。 其他良好的規范,例如RAML , API藍圖 , RSDL , WADL , API Builder , iodocs和tinyspec也正在使用中,值得了解。

OpenAPI和朋友可以完成這項工作,但是從根本上講,這些規范集中在資源位置, 幾乎沒有或沒有超媒體支持。

就超媒體而言,它完全破壞了資源位置。 超媒體驅動的RESTful Web服務和API并非是靜態的,遠非如此,大多數機器或人類需要了解的內容都是在運行時共享的。

3. OpenAPI不是答案,現在呢?

您可能經常碰到超媒體將RESTful Web服務和API轉換為資源周圍的狀態機的說法。 從概念上講,這是有道理的,因為超媒體帶來了狀態和過渡的明確定義的語義。

而不是資源位置,我們應該專注于描述資源本身。 資源描述至少應包括其數據語義,受支持的可能動作(狀態轉換)(如果可能,取決于上下文)以及相關的可導航資源(與關系類型的鏈接)。

應用程序級配置文件語義(ALPS)

應用程序級配置文件語義 ( ALPS )可能是最先進的,包含最廣泛的規范,用于在RESTful Web服務和API的上下文中記錄和共享超媒體的語義。

ALPS文檔可以用作配置文件,以解釋具有與應用程序無關的媒體類型(例如HTML, HAL , Collection + JSON , Siren等)的文檔的應用程序語義。 這樣可以提高配置文件在各種媒體類型之間的可重用性。

http://www.alps.io/spec/index.html

概要文件的作用是為人類和機器建立共享的結構化詞匯表。 簡而言之,概要文件允許定義數據的語義和過渡以及包括文檔的能力。

使用通用媒體類型(HTML,Atom, Collection + JSON等)實現超媒體客戶端/服務器應用程序時,客戶端和服務器實例需要共享對特定于域的信息的理解,例如數據元素名稱,鏈接關系值,和狀態傳輸參數。 該信息與正在實施的應用程序(例如會計,聯系人管理等)直接相關,而不是與表示中使用的媒體類型相關。

http://www.alps.io/spec/index.html

在本教程的上一部分中,我們已經看到了許多實現RESTful Web服務和API的規范,讓我們嘗試通過ALPS支持來擴展其中之一(例如HAL )。

$ curl https://rentals.jcg.com/{"_links": {"self": {"href": "https://rentals.jcg.com"},"reservations": {"href": "https://rentals.jcg.com/reservations"},"customers": {"href": "https://rentals.jcg.com/customers"},"profiles": {"href": "https://rentals.jcg.com/alps"}} }

與案例研究中的示例相比,您可能會注意到服務器還返回了一個附加的鏈接profiles 。 讓我們看看它的背后。

$ curl https://rentals.jcg.com/alps{ "version": "1.0", "doc": { "href": "https://rentals.jcg.com/documentation.html" }, "descriptor": [ { "id": "customers", "href": "https://rentals.jcg.com/alps/customers" }, { "id": "reservations", "href": "https://rentals.jcg.com/alps/reservations" } ] }

到目前為止,我們已經發布了兩個配置文件描述符, customers和reservations 。 讓我們更深入地了解reservations配置文件描述符。

$ curl https://rentals.jcg.com/alps/reservations{ "version": "1.0", "descriptor": [ { "id": "reservation", "type": "SEMANTIC", "descriptor": [ { "id": "from", "type": "SEMANTIC" "href": "https://schema.org/Date"}, { "id": "id", "type": "SEMANTIC" "href": "https://schema.org/Thing#identifier"}, { "id": "to", "type": "SEMANTIC","href": "https://schema.org/Date"}, { "id": "vehicle", "type": "SEMANTIC","href": "https://schema.org/Vehicle#name"} ] }, { "id": "create", "name": "reservations", "type": "UNSAFE", "rt": "#reservation" }, { "id": "list", "name": "reservations", "type": "SAFE", "rt": "#reservation" }, { "id": "customer", "name": "customer", "type": "SAFE", "href": "https://rentals.jcg.com/alps/customers""rt": "#customer" }, { "id": "update", "name": "reservation", "type": "IDEMPOTENT", "rt": "#reservation" }, { "id": "delete", "name": "reservation", "type": "IDEMPOTENT", "rt": "#reservation" } ] }

值得花一些時間并簡要介紹一下此個人資料。 它概述的第一件事是reservation描述符,用于描述數據語義(屬性及其類型)。 之后,將提供動作和過渡的描述符數量( create , list , delete , update , customer )。

附帶說明一下,盡管在我們的示例中,概要文件是由應用程序制作的,但是ALPS還具有注冊表概念( ALPS概要文件注冊表),以允許概要文件定義被重用和引用。 已經從schema.org定義中預先構建了大量ALPS配置文件,并且可以從http://alps.io/schema.org獲得 。

回到主題,讓我們看一下使用HAL樣式作為參考的ALPS配置文件如何滲透到資源表示中。

{ "id": "13e1892765c5", "vehicle": "Honda Civic 2020", "from": "2020-01-01", "to": "2020-01-05", "_links": { "profile": { "href": "https://rentals.jcg.com/alps/reservations#reservation" }, "customer": { "href": "https://rentals.jcg.com/customers/fed195a03e9d","profile": "https://rentals.jcg.com/alps/customers#customer"}, "self": { "href": "https://rentals.jcg.com/reservations/13e1892765c5" } }, "_templates": { …} }

HAL文檔已得到充實,以包括指向各自資源配置文件的profile 鏈接關系 。 或者,有時可以看到Links頭對于發送回資源??配置文件信息很有用。

Links: profile="https://rentals.jcg.com/alps/reservations#reservation"

總體而言, ALPS規范是描述RESTful Web服務和API的資源語義和轉換的一種非常簡單且人性化的方式。

ALPS與JSON-LD,...

一些超媒體規范對數據語義(詞匯)具有一流的支持。 一個很好的例子是帶有@vocab上下文定義的JSON-LD 。

{ "@context": { "@vocab": "http://schema.org/" }, "@type": "Reservation", "id": "13e1892765c5", "vehicle": "Honda Civic 2020", "from": "2020-01-01", "to": "2020-01-05", "customer": { "@id": "https://rentals.jcg.com/customers/fed195a03e9d" }, "@id": "https://rentals.jcg.com/reservations/13e1892765c5" }

當依賴超媒體規范時,資源語義詳細信息將作為資源表示的一部分。 無論如何,這是有價值的信息。 相反, ALPS配置文件與資源表示形式和媒體類型分開存在,可以獨立查詢和解釋。

JSON超模式

JSON模式是一種基于JSON的格式,用于描述JSON數據的結構。 JSON Hyper-Schema規范具有指定超鏈接和與超媒體相關的關鍵字的功能,從而豐富了JSON Schema詞匯表。

JSON Hyper-Schema是一個JSON Schema詞匯表,用于通過超鏈接注釋JSON文檔以及用于通過HTTP等超媒體環境處理和操縱遠程JSON資源的指令。

https://tools.ietf.org/html/draft-handrews-json-schema-hyperschema-02

與ALPS相比, JSON Hyper-Schema提供了更為豐富的語義,用于描述數據,鏈接(關系)和操作(負擔)。 以下示例只是為reservation資源構建JSON Hyper-Schema的一種可能性。

{"title": "Reservation","type": "object","properties": {"id": {"title": "Unique Reservation identifier","type": "string"},"vehicle": {"title": "Name of the vehicle","type": "string"},"from": {"title": "Start date","type": "date"},"to": {"title": "End date","type": "date"}},"required" : ["from", "to", "vehicle"],"links": [{"rel": "self","href": "{id}"},{"title": "Customer","rel": "customer","href": "/reservation/{id}/customer"},{"title": "Cancel Reservation","rel": "delete","href": "{id}","method": "DELETE"},{"title": "Update Reservation","rel": "update","href": "{id}","method": "PUT","schema": {"type": "object","properties": {"vehicle": {"title": "Name of the vehicle","type": "string"}, "from": {"title": "Start date","type": "date"},"to": {"title": "End date","type": "date"} },"required": ["vehicle", "to", "from"]}}] }

突出的第一件事可能是每個鏈接和操作所具有的詳細程度。 您可能會注意到的直接缺點之一是語義(例如, delete動作)與具體的指針(例如href模板)交織在一起。

微格式

除了ALPS和JSON Hyper-Schema外 ,還有一些鮮為人知的規范,值得一提。 微格式就是其中之一。

微格式是為人為先設計的,其次是為機器設計的, 微格式是一組基于現有標準和廣泛采用的標準的簡單,開放的數據格式。 微格式不是要扔掉今天有用的東西,而是要通過適應當前的行為和使用模式來首先解決更簡單的問題。

http://microformats.org/wiki/about

微格式的最新版本稱為microformats2 。

Microformats2取代并取代了兩種經典的微格式 (有時稱為microformats1),并且結合了從微數據和RDFa中獲得的經驗教訓。

http://microformats.org/wiki/microformats2

微格式的主要目標是HTML媒體類型( 語義HTML ),因此它不一定最適合大多數RESTful Web服務和API。

都柏林核心元數據計劃(DCMI)

最初的都柏林核心規范發布于1995年,是一組15個(最初為13個)核心元素,用于描述資源語義。 因此, 都柏林核心元數據計劃 ( DCMI )是一個旨在支持跨各種目的和業務模型的元數據設計和最佳實踐創新的組織。 它定義了更豐富的規范DCMI元數據術語 。

總的來說, Dublin Core是致力于應用程序配置文件和鏈接數據 (尤其是基于RDF詞匯表)的開拓性工作之一。 多年來,它所管理的規范數量已經大大增加,而不僅僅是元數據。

與微格式一樣 ,對于RESTful Web服務和API來說, 都柏林核心和相關規范的廣泛范圍可能不是您的首選。

4。結論

在本教程的這一部分中,我們討論了用豐富的超媒體支持來記錄RESTful Web服務和API的挑戰。 公平地說,這是一個已解決的問題的說法遠非事實。 如今 , OpenAPI規范已成為事實上的選擇,但尚未將超媒體視為一流的公民。 最突出的替代方案,尤其是應用程序級配置文件語義(ALPS)和JSON Hyper-Schema ,無疑正在朝著正確的方向前進,但是,兩者仍在進行中。

5.下一步是什么

在本教程的下一部分中,我們將通過在JVM平臺(使用Java)上設計和實現成熟的RESTful Web服務API,從理論轉向實踐。

翻譯自: https://www.javacodegeeks.com/restful-services-with-hateoas-documenting-hypermedia-apis.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的HATEOAS的RESTful服务。 记录超媒体API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。