內送 REST Web 服務

本主題提供產品使用內送 Web 服務支援 REST 服務的更多相關資訊。

REST 引擎會檢查 Accept-Language 標頭,然後嘗試尋找其地區設定符合所參考語言的支援語言。如果找到,Web 服務回應會傳回任何可以該語言翻譯的資料。請注意,如果 Accept-Language 標頭中找不到任何支援的語言,則系統會使用提交要求的使用者語言。

內送 Web 服務 REST 記錄會以 1.0 或 2.0 版的 REST 引擎標記。版本 2.0 是用於新服務的版本。為了能回溯相容,因此引入版本 1.0。某些系統行為會視 REST 服務的版本而有所不同。以下各節重點說明發生此情況的情境。

HTTP 方法和參數

定義內送 REST Web 服務的作業時,產品可支援 Get、Patch、Post、Put 和 Delete 等 HTTP 方法。請注意,產品對於這些不同 HTTP 方法的支援,其實是一種溝通手段,借此將 Web 服務的用途傳達給外部世界。然而,REST Web 服務的實際行為取決於基於底層結構的物件 (業務物件、業務服務或服務指令檔) 的行為。例如,若某項作業所參考的服務指令檔只會擷取記錄,則您可以為該作業設定 “Put” HTTP 方法。產品無法偵測到這種差異。組態使用者應根據該服務的邏輯,仔細考慮該使用的正確方法。

至於那些參考業務物件的作業,必須提供交易類型。REST 語法不支援在執行時間定義交易類型。在這種情況下,會進行一些與交易類型和 HTTP 方法有關的基本驗證檢查。例如,只有 Read 交易類型,Get 方法才會有意義。

備註:使用交易類型 Change 時,需要傳入所有的值。使用業務類型 Update 時,允許 Web 服務僅傳遞主索引鍵以及要被更新的值。所有其他元素將保留其現有的值。

您可以另外定義參數。您可以為每個參數定義元素的外部參考,這就是該參數向外部呼叫程式公開的方式,而且在 API 規格中有相關定義。這些參數中的每一個都會對應至來自基礎業務物件、業務服務或服務指令檔的結構元素 XPath。針對每一個參數,您指定其為 Path 參數或者是 Query 參數。

  • 路徑參數是指那些屬於端點組成部分的必要參數。每個路徑參數都必須包含在作業的 URI 元件中,並用大括號括住。

  • 查詢參數是選擇性的。這些參數不是端點的一部分,而是包含在端點 URL 中,位於問號之後,後面是名稱值組。

如需範例 URL 中的路徑和查詢參數例子,請參閱以下的 URL 一節。

URL 組成

為 REST 服務建立端點 URL 時,會有三個主要的組成部分構成一個完整的 URL。

  • 第一個是與環境有關的組成部分。與雲端實作相比,處所實作則會有所不同。二者都會有主機和連接埠,然後是其他用於識別環境的元件。

  • 第二個組成部分是產品指派的硬式編碼路徑,也就是 "/rest/apis"。

    URL 的這兩個組成部分是定義在替代變數 F1_ REST_ BASE_ URL 中。這是在初始化環境時定義的。如需詳細資訊,請參閱伺服器管理指南。

URL 的其餘組成部分是根據每一個內送 Web 服務及其作業的組態動態建立的。元件是 "/ownerURIComponent/resourceCategoryURIComponent/iwsURIComponent/operationURIComponent"

  • 擁有者 URI 元件是取自內送 REST Web 服務的擁有者標誌。一個特殊的可延伸查尋 (REST 服務的擁有者組態) 會為每個擁有者標誌定義這個元件。

  • 每個內送 REST Web 服務都必須參考一個資源類目。此類目是用來將相關 Web 服務與資源的通用類目產生關聯。至於連結至相同資源類目的多個內送 Web 服務記錄,外部類目可以使用此資訊,將相關 Web 服務組合在一起。資源類目是可延伸的查尋,而 URI 元件是此記錄的屬性。

  • 每一個 REST 內送 Web 服務記錄都定義了一個 URI 元件,當作此內送 Web 服務記錄的外部識別碼。這個值在指定的擁有者標誌中必須是唯一的。

  • 每個作業都必須定義 HTTP 方法以及一個選擇性 URI 元件。定義路徑參數時,必須在 URI 元件中使用大括號括住路徑參數。

無論什麼情況,URI 元件的開頭都必須是斜線 ('/')。

以下是 REST 服務的 URL 動態組成部分的幾個範例。最後一個範例說明使用查詢參數。

內送 Web 服務名稱

URI 元件

擁有者

URI 元件

資源類目

URI 元件

作業 HTTP 方法

URI 元件

動態 URL 元件 執行時間範例

c1rateCalculation

/rateCalculation

C1

/customer

C1-RATES

/rates

Post

/

../customer/rates/rateCalculation/ ../customer/rates/rateCalculation/

w1WorkActivity

/workActivity

W1

/asset

W1-WORK

/work

Get

/{activityId}

../asset/work/workActivity/{activityId} ../asset/work/workActivity/5798165498

w1WorkActivity

/workActivity

W1

/asset

W1-WORK

/work

Patch

/scheduleWindow/{externalSystem}/{activityId}/{windowStartDateTime}

../asset/work/workActivity/scheduleWindow/{externalSystem}/{activityId}/{windowStartDateTime} ../asset/work/workActivity/scheduleWindow/MY-COMPANY/5798165498/20190101

CM-AccountActivityHistory

/accountActivityHistory

CM

/cm

CM-ACCT-INFO

/accountInformation

Get

/{accountId}

../cm/accountInformation/accountActivityHistory/{accountId} ../cm/accountInformation/accountActivityHistory/123456789?activityId=5468976

承載格式

REST 服務支援接收採用 XML 或 JSON 格式的要求承載,並傳回採用 XML 或 JSON 格式的承載。傳回的預設格式取決於「REST 引擎版本」的值。

  • 版本 2.0 服務採用 JSON 格式為預設值。您可以提供 application/XML 的接受標頭來置換預設值。

  • 版本 1.0 服務採用 XML 格式為預設值。您可以提供 application/JSON 的接受標頭來置換預設值。

JSON 格式的根節點

具有 JSON 格式承載的版本 2.0 服務在要求中不接受或在回應中不傳回承載周圍的任何根節點。以下是 2.0 版服務的 REST 呼叫回應範例:

{
   "batchJobId": "string",
   "requestSuccessful": "string"
}

具有 JSON 格式承載的版本 1.0 服務預期要求中有根節點,且在回應中傳回根節點。以下是 1.0 版服務的 REST 呼叫回應範例:

{
  "F1CnclBatJob": {
    "batchJobId": "string",
    "requestSuccessful": "string"
 }
}

內送 Web 服務維護頁面上顯示的開放 API 規格,會在檢視規格時根據記錄的 REST 引擎版本顯示預期的格式。

JSON 中的資料類型格式

在 JSON 格式中,字串會以引號括住,而數字和布林資料則沒有引號。REST 引擎版本 2.0 的所有服務皆遵循此標準。REST 引擎版本 1.0 的服務原本會錯將數字和布林資料視為字串,並傳回帶有引號的資料。此問題已被更正。

為了配合可因應版本 1.0 服務行為的任何整合,系統提供功能可識別為此規則例外的內送 Web 服務。對於識別為例外的任何內送 Web 服務,系統會繼續將數字和布林資料視為 JSON 回應中的字串。若要新增一或多筆內送 Web 服務記錄至例外列表:

  • 前往功能組態

  • 尋找功能類型為外部訊息的現有功能組態。如果不存在,請建立一個功能組態。

  • 內送 Web 服務 JSON 資料類型例外選項類型新增一個選項。

  • 在選項值中,指出例外的內送 Web 服務記錄。請注意,可以新增選項類型的多個選項。此外,選項值支援以逗號分隔的列表。

面向外部結構

依預設,基礎服務的結構 (例如,服務指令檔、業務物件或業務服務) 也是 REST 內送 Web 服務作業的結構,並同時作為其「要求」與「回應」結構。本產品能夠為 REST 內送 Web 服務作業定義明確的結構,讓使用者可以調整面向外部消費者的結構。內送 Web 服務作業結構也支援某些僅允許針對內送 Web 服務作業結構定義額外功能的特殊組態。

作業結構支援下列功能:

  • 宣告元素是僅屬於要求結構、僅屬於回應結構、屬於兩者 (預設值),還是不屬於以上各項。這是用來在要求與回應結構定義之間建立明確的區隔。

  • 將不同的元素名稱指派給內部元素。這可讓內部服務元素名稱更符合對元素的內部參照 (如有需要)。面向外部的元素名稱可以不同,以提供可讀性更高的結構。

  • 以不影響內部服務處理的方式,引入支援連結和其他類型結構標準的特殊元素。

如需詳細資訊,請參考 Web 服務結構節點與屬性

REST Servlet 會使用要求和回應結構,將元素對應至內部結構或從內部結構進行對應。

備註:雖然呼叫程式應僅提供由要求結構定義的元素,但應用程式不會篩選出無關的元素。假設內部服務的設計會忽略此類元素。不過,只有回應結構定義的元素才會包含在回應中。

API 規格文件

您可以為內送 Web 服務提供下列文件資訊:

  • 每個作業的簡短和詳細描述。

  • 可為個別元素提供說明文字。在「內送 Web 服務」的所有作業之間,可以跨多個元素共用相同的文字。如果元素未與說明文字相關聯,則會改用其內部欄位的標籤。

  • 可為每個作業提供要求與回應範例文件。

  • 作業可能與控制在「開放 API 規格」中顯示順序的序號相關聯。

備註:由於基準產品 API 的已發布目錄目前只有英文版,因此未翻譯詳細的描述與元素相關說明文字。