2016-11-13 80 views
0

最近,我設計了一個RESTful API,並且我想使用Link頭字段來實現HATEOAS。有沒有一種標準的方法來定義HTTP頭字段中的CURIE?

這一切都很好,沒有任何實際問題,但我想讓API的客戶端更容易。

Link頭例如可能是這樣的:

Link: <https://api.domain.com/orders/{id}>; rel="https://docs.domain.com/order"

在這種情況下,客戶將不得不通過搜索在rel屬性https://docs.domain.com/order值找到的鏈接。

這是有效的,但由於文檔的URI可能會改變它的脆弱性,並且由於它的長度,它使得它作爲搜索關鍵詞有點不切實際。

所以我想嘗試和使用居里使它像這樣代替:

Link: <https://api.domain.com/orders/{id}>; rel="[rc:order]"

這樣一個URI變化的問題得以減輕,在大多數情況下,這是更緊湊使客戶更容易搜索。

我的問題是,因爲我使用的是Link頭字段來實現HATEOAS,我覺得它將CURIE作爲HTTP頭字段最爲一致,而不是在響應主體中引入元數據。由於整個API使用標準HTTP頭字段和所有元數據(分頁,版本控制等)的狀態代碼,所以我寧願不要將元數據引入響應主體來定義CURIE。

但是,如果我使用HTTP頭字段,我應該使用哪個字段的CURIE?

是否有一個標準的方式來做到這一點與HTTP頭字段?

如果不是,我應該只使用一個自定義標題字段,如X-Curie: <https://docs.domain.com>; name="rc",並將其文檔記錄在客戶端?

我環顧四周,大部分資源都是參考XML或HAL標準,所以任何有關HTTP頭字段的信息都將不勝感激。

回答

0

不,你不能那樣做。鏈接關係是一個字符串 - 僅此而已。

,你應該問自己爲什麼要首先使用不穩定的鏈接關係的名字的問題...

+0

因爲這就是RFC鏈接所需的網頁。它指出:「不希望註冊關係類型的應用程序可以使用擴展關係類型,它是唯一標識關係類型的URI [RFC3986]」然後它會說:「當擴展關係類型進行比較時,它們必須作爲字符串進行比較(如果以不同的格式序列化,轉換爲URI後,例如Curie [W3C.CR-curie-20090116])「。所以需要一個URI並且允許CURIE,我只是想知道是否有標準的方法來定義CURIE。這並不意味着URI絕對不穩定,但CURIE更好。 –

+0

至少這是我對RFC的理解。當然,我並不想使用CURIE,我只是想,如果有一種標準的方法可以在HTTP頭域中定義一個CURIE,這會使客戶端更好一些。 –

+0

@JakeLucas - 你誤解了那部分;它是關於鏈接關係以除HTTP頭域之外的其他格式顯示的。 –

0

即使你不使用Link頭,居里也不會解決這個問題,你當下。因爲CURIE的標準狀態表明縮短的URI必須在執行任何比較之前「展開」。這也適用於再次比較所討論的鏈接關係。

更實用的方法是投入自己的URI,如foo:order。然後,您可以使用一些自定義網址縮短方法來解決相關關係的文檔網址。這種方法被超媒體格式使用,如HAL+JSON(HAL格式使用curies實際上是誤導性的,它只能用作解決URL到文檔的方法)。

0

居里在HTTP標頭Linkrel性能不會得到擴大,因爲所有rel性能與簡單的字符串匹配相提並論,沒有被視爲的URI。

我的主要關注點是「因爲文檔的URI可以改變它的脆弱性」 - 然後選擇一個不會改變的URI。即使您使用重定向到文檔深處的某個位置的URL,如果您希望客戶端開發人員能夠解決該問題,您爲鏈接關係選擇的URI也必須是永久性的。

相關問題