HTTP API 入門
本文將引導您創建、發布并調用一個 HTTP 類型的 API 服務,以快速體驗 API 網關。
操作步驟
建議您先閱讀 快速入門概述,了解 API 網關的角色及完整使用流程。
示例工程
為方便快速開發體驗 API 網關 HTTP API 服務,您可以下載本文涉及的 示例工程。
步驟一:編寫 HTTP Server
為方便快速體驗 API 網關 HTTP API 服務發布與調用,此處編寫一個簡單的 Spring Boot Server。
不使用后端集群認證功能時,API 網關對 HTTP Server 無要求。如需網關和服務端之間的雙向認證,則需要接入網關 SDK。目前僅提供 Java SDK。詳見 HTTP API 服務開發。
@RestController
public class StartController {
@RequestMapping("/hello/world")
public String hello() {
System.out.println("hello");
Map<String, String> m = new HashMap<>();
m.put("hello", "world");
return JSON.toJSONString(m);
}
}
編寫完成后,將服務部署在 API 網關可以訪問到的服務器上,啟動該 server。
步驟二:創建系統集群
進入金融分布式架構控制臺。
在左側導航欄單擊 API 統一網關 > API 發布 > 系統集群。
在系統集群列表頁面,單擊 創建系統集群 按鈕。
在新彈出窗口中,您需要配置以下信息:
系統集群名稱:必填,用于識別系統集群。本示例使用
helloserver
。協議類型:根據本示例,選擇
HTTP
。地址配置方式:選擇手動配置,即手動配置系統集群的 IP 地址或域名。
IP地址/域名:格式為
地址:端口
。本示例中,IP 地址為http://127.0.0.1
,端口號為8080
。IP 地址或域名:
IP 地址格式為 (1~255).(0~255).(0~255).(0~255)。
域名可以包含字母、數字或者半角的連接符 (-),總共不超過 200 個字符。
域名必須以
http://
或https://
開頭。
端口:HTTP 默認端口為 80,SOFARPC 默認端口為 12200。端口號范圍為 1-65535。
認證方式:即網關向后端系統集群發送請求時是否加簽。本示例,不使用認證功能,選擇
無
。說明如需認證功能,在步驟一編寫后端系統、本地 API 服務開發時需要接入網關 SDK。詳見 編寫HTTP API。
描述:用于描述系統集群的作用等,64 個字符以內,可為空。
完成后單擊 確定。
步驟三:創建 API 分組
在左側導航欄單擊 API 發布 > API 分組,進入分組列表。
單擊 API 分組列表右上方的 創建分組 按鈕。
在新彈出窗口中,輸入 API 分組信息:
分組名稱:必填,用于識別 API 分組。支持英文字母、中文、數字、下劃線(_)、連接符(-),32 個字符以內。本示例使用
hello
。描述:選填,用于描述 API 分組的作用等,64 個字符以內,可為空。
完成后單擊 確定。
步驟四:創建并發布 HTTP API
在左側導航欄單擊 API 發布 > API 管理 頁,單擊列表右上方的 創建 API。
在新頁面中,選擇 HTTP API 類型,單擊 創建。
在 定義 API 步驟中,您需要配置以下信息:
API 分組:必選,選擇步驟三創建的 API 分組。
API 名稱:必填,用于識別 API,支持英文字母、中文、數字、下劃線(_)、連接符(-),32 個字符以內。本示例使用
hello
。說明同一個 API 分組下,API 名稱不能相同。
描述:選填,用于描述 API 的作用等,64 個字符以內。
API 授權應用類型:必選,指定可以訂閱并調用該 API 的應用類型。根據本示例,需選擇 應用。
請求路徑:必填,針對應用設置的請求資源的 URL,通過請求路徑可以定位到要請求的資源。根據本示例,需輸入
/hello/world
。路徑匹配規則:選擇 絕對匹配,即調用時完全匹配以上填寫的路徑。詳見 路徑匹配規則。
方法:必填,表明要對給定的 HTTP 資源執行的操作。本示例使用
GET
。請求參數:即 API 訂閱者向網關發起請求時要配置的參數。詳見 API 屬性說明 > 請求參數。
響應參數:即網關向訂閱者發送響應時的返回值類型和錯誤碼等。詳見 API 屬性說明 > 響應參數。
單擊 下一步,進入后端配置頁面,您需要選擇 后端配置類型 并輸入后端配置信息。根據本示例,需選擇 系統集群 并配置具體集群信息。
協議類型:必選,表示網關接收到請求后轉發給的后端服務使用的通信協議類型。根據本示例,選擇
HTTP
。請求路徑:API 請求所指向的資源 URL。本示例使用
/hello/world
。超時時間:必填,API 請求超時時間,單位為毫秒(ms),保持默認 3000 毫秒即可。
路由策略:必選,表示當網關接收到語法后使用的路由策略。本例中選擇 根據請求路徑路由,即直接轉發。
系統集群:必選,選擇步驟二創建的系統集群,即
helloserver
。
單擊 創建。
創建完成后,單擊 立即發布 發布該 API。
步驟五:創建應用
在左側導航欄單擊 API 訂閱 > 應用管理 頁,單擊列表右上方的 創建應用。
在 創建應用 窗口,選擇 應用類型 為 應用。
輸入 應用名稱,用于識別應用。本例使用
hello
。單擊 確定。
應用添加完成后,訂閱者需在應用詳情頁,獲取該應用 APPID。獲取 APPID 后,需將 APPID 提供給想要訂閱的 API 的發布者,獲得該 API 的訪問授權。
步驟六:創建授權對象
在左側導航欄單擊 API 發布 > 授權管理 頁,單擊列表右上方的 創建授權對象。
在 創建授權對象 窗口中,配置訂閱方應用的授權信息。
應用來源:必選。此處選 內部系統 即可,表示授權給當前租戶的當前環境下的應用訂閱。
應用名稱:輸入步驟五創建的應用名稱,如
hello
,系統會自動獲取其 APPID 與類型。所屬公司/部門:用于識別應用所屬的公司或部門,可為空。
描述:輸入對該授權對象的備注信息,可為空。
完成后單擊 確定。
步驟七:綁定授權對象
在 API 管理 頁面,找到待訂閱 API,進入其詳情頁。
在 授權對象 標簽頁下,單擊 綁定授權對象。
在 添加授權對象 窗口中,找到步驟六創建的授權應用。
勾選該應用,單擊 確定,完成 API 授權。
步驟八:編寫 API 調用代碼
獲取如下服務配置信息:
在訂閱方應用詳情頁獲取該應用的密鑰(Access Key/Secret Key)。
在 API 詳情頁獲取該 API 的域名(host)、請求路徑(path)與方法(method)。
編寫調用代碼,此處以 Java 代碼為例:
說明如果 API 開啟了密鑰認證,您還需要在工程中配置相應的 Access Key 和 Secret Key,推薦使用啟動參數和環境變量的形式。
# 客戶端請求的ak、sk,就是應用的密鑰信息 gateway.accessKey=<testAccessKey ID> gateway.secretKey=<testSecretKey ID> apigateway.url=<yourGatewayURL>
@Value("${gateway.accessKey}") private String accessKey; @Value("${gateway.secretKey}") private String secretKey; @Value("${apigateway.url}") private String gatewayurl; @Before public void initClient() { // 初始化請求客戶端 ApiSecretKey apiSecretKey = new ApiSecretKey(gateway.accessKey, gateway.secretKey); List<ApiSecretKey> secretKeys = new ArrayList<>(); secretKeys.add(apiSecretKey); apiClient = new DefaultApiClient(gatewayUrl, secretKeys); } @Test public void testNoSignHttp() { ParamGetRequest request = new ParamGetRequest(); request.setPath("hello"); // 是否對響應進行簽名校驗 request.setClientCheckSign(false); ApiResponse response = apiClient.execute(request); System.out.println(JSON.toJSONString(response)); }
發起調用后,可得出以下結果:
{"body":"{\"hello\":\"world\"}"}
注意事項
如果您使用的是本文檔的示例工程,可以將 com.alipay.gateway.quickstart.Config#apiServletSignFilter
方法中的 filter.setCheckSign(true);
注釋掉。注釋之后,將不會對請求進行驗簽驗證;否則會報“獲取簽名密鑰失敗”的錯誤。