K8s Restful patch請求content-type相關設置

API 資源使用REST模式,具體說明如下。

  1. GET /<資源名的複數格式>:獲得某一類型的資源列表,例如GET /pods 返回一個Pod資源列表。

  2. POST /<資源名的複數格式>:創建一個資源,該資源來自用戶提供的JSON對象。

  3. GET /<資源名複數格式>/<名字>:通過給出的名稱(Name)獲得單個資源,例如GET /pods/first 返回一個名稱爲“first”的Pod。

  4. DELETE /<資源名複數格式>/<名字>:通過給出的名字刪除單個資源,刪除選項(DeleteOptions)中可以指定的優雅刪除(Grace Deletion)的時間(GracePeriodSeconds),該可選項表明了從服務端接收到刪除請求到資源被刪除的時間間隔(單位爲秒)。不同的類別(Kind)可能爲優雅刪除時間(Grace Period)申明默認值。用戶提交的優雅刪除時間將覆蓋該默認值,包括值爲0的優雅刪除時間。

  5. PUT /<資源名複數格式>/<名字>:通過給出的資源名和客戶端提供的JSON對象來更新或創建資源。

  6. PATCH /<資源名複數格式>/<名字>:選擇修改資源詳細指定的域。

對於PATCH操作,目前Kubernetes API通過相應的HTTP首部“Content-Type”對其進行識別。

目前支持以下三種類型的PATCH操作。

  1. JSON Patch, Content-Type: application/json-patch+json。在RFC6902的定義中,JSON Patch是執行在資源對象上的一系列操作,例如 {"op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ]}。詳情請查看RFC6902說明,網址爲HTTPs://tools.ietf.org/html/rfc6902。

  2. Merge Patch, Content-Type: application/merge-json-patch+json。在RFC7386的定義中,Merge Patch必須包含對一個資源對象的部分描述,這個資源對象的部分描述就是一個JSON對象。該JSON對象被提交到服務端,並和服務端的當前對象合併,從而創建一個新的對象。詳情請查看RFC73862說明,網址爲HTTPs://tools.ietf.org/html/rfc7386。

  3. Strategic Merge Patch, Content-Type: application/strategic-merge-patch+json。Strategic Merge Patch是一個定製化的Merge Patch實現。接下來將詳細講解Strategic Merge Patch。

在標準的JSON Merge Patch中,JSON對象總是被合併(merge)的,但是資源對象中的列表域總是被替換的。通常這不是用戶所希望的。例如,我們通過下列定義創建一個Pod資源對象:

spec:
  containers:
    - name: nginx
      image: nginx-1.0

接着我們希望添加一個容器到這個Pod中,代碼和上傳的JSON對象如下所示:

PATCH /api/v1/namespaces/default/pods/pod-name
spec:
  containers:
    - name: log-tailer
      image: log-tailer-1.0

如果我們使用標準的Merge Patch,則其中的整個容器列表將被單個的“log-tailer”容器所替換。然而我們的目的是兩個容器列表能夠合併。

爲了解決這個問題,Strategic Merge Patch通過添加元數據到API對象中,並通過這些新元數據來決定哪個列表被合併,哪個列表不被合併。當前這些元數據作爲結構標籤,對於API對象自身來說是合法的。對於客戶端來說,這些元數據作爲Swagger annotations也是合法的。在上述例子中,向“containers”中添加“patchStrategy”域,且它的值爲“merge”,通過添加“patchMergeKey”,它的值爲“name”。也就是說,“containers”中的列表將會被合併而不是替換,合併的依據爲“name”域的值。

此外,Kubernetes API添加了資源變動的“觀察者”模式的API接口。

  • GET /watch/<資源名複數格式>:隨時間變化,不斷接收一連串的JSON對象,這些JSON對象記錄了給定資源類別內所有資源對象的變化情況。

  • GET /watch/<資源名複數格式>/:隨時間變化,不斷接收一連串的JSON對象,這些JSON對象記錄了某個給定資源對象的變化情況。

上述接口改變了返回數據的基本類別,watch動詞返回的是一連串的JSON對象,而不是單個的JSON對象。並不是所有的對象類別都支持“觀察者”模式的API接口,在後續的章節中將會說明哪些資源對象支持這種接口。

另外,Kubernetes還增加了HTTP Redirect與HTTP Proxy這兩種特殊的API接口,前者實現資源重定向訪問,後者則實現HTTP請求的代理。



原文鏈接:https://www.orchome.com/1359

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章