快速開始指導您註冊並發布一個供移動端調用的 MPC 類型的 API 服務。整體過程分為 6 步:
服務端開發
引入網關二方包
在專案的主 pom.xml 檔案中引入如下二方包(如原工程已經有依賴,請忽略)。其中 mobilegw-unify 系列依賴請使用最新版本,當前最新版本為 1.0.5.20201010。
<!-- mobilegw unify dependency-->
<dependency>
<groupId>com.alipay.gateway</groupId>
<artifactId>mobilegw-unify-spi-mpc</artifactId>
<version>${the-lastest-version}</version>
</dependency>
<dependency>
<groupId>com.alipay.gateway</groupId>
<artifactId>mobilegw-unify-spi-adapter</artifactId>
<version>${the-lastest-version}</version>
</dependency>
<dependency>
<groupId>com.alipay.gateway</groupId>
<artifactId>mobilegw-unify-log</artifactId>
<version>${the-lastest-version}</version>
</dependency>
<dependency>
<groupId>com.alipay.hybirdpb</groupId>
<artifactId>classparser</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>com.alipay.mpaaschannel</groupId>
<artifactId>common</artifactId>
<version>2.4.2019040801</version>
</dependency>
<dependency>
<groupId>com.alipay.mpaaschannel</groupId>
<artifactId>tenant-client</artifactId>
<version>2.4.2019040801</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.72_noneautotype</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>hessian</artifactId>
<version>3.3.6</version>
</dependency>定義服務介面並實現介面
按照業務需求,定義服務介面:
com.alipay.xxxx.MockRpc。說明方法定義中的入參盡量定義為 VO,這樣後期添加參數,就可以直接在 VO 中添加,而不改變方法的聲明格式。
服務介面定義的相關規範,請參見 業務介面定義規範。
提供該介面的實現
com.alipay.xxxx.MockRpcImpl。
定義 OperationType
在服務介面的方法上添加 @OperationType 註解,定義發布服務的介面名稱。@OperationType 有 3 個參數成員,為便於維護,請填寫完整:
value:介面唯一標識;在網關全域唯一,盡量定義詳細,否則可能會和其他業務方的 value 值一樣,導致無法註冊服務。定義規則:
組織.產品域.產品.子產品.操作。name:介面中文名稱。
desc:介面描述。
樣本如下:
public interface MockRpc {
@OperationType(value="com.alipay.mock", name="MPC mock 介面", desc="複雜 mock 介面")
Resp mock(Req s);
@OperationType(value="com.alipay.mock2", name="xxx", desc="xxx")
String mock2(String s);
}
public static class Resp {
private String msg;
private int code;
// ignore getter & setter
}
public static class Req {
private String name;
private int age;
// ignore getter & setter
}聲明 API 服務
該步驟目的是將定義好的 RPC 服務,通過網關提供的 SPI 包,聲明為對外提供服務的 API。需要如下 5 個參數:
registryUrl: 註冊中心的地址。共用式金融科技平台的註冊中心地址為
mpcpub.mpaas.cn-hangzhou.aliyuncs.com。appName:業務方的應用程式名稱。
workspaceId:應用所處環境的工作空間標識(workspaceId)。
projectName:應用所屬租戶的專案名稱。
privateKeyPath:
RSA私密金鑰的 ClassPath,與 mpaaschannel 建立串連時用於校正合法性。重要此處的私密金鑰應和在控制台配置的 應用公開金鑰 相對應。如您還未產生密鑰或未在控制台配置 應用公開金鑰,請查看後面的步驟 配置應用公開金鑰。
私密金鑰放置在
/META-INF/config/rsa-mpc-pri-key-{env}.der,其中{env}為不同的環境,如dev、sit、prod等。
您可以通過 Spring 或 Spring Boot 方式聲明 API 服務。
Spring 聲明方式
在對應 bundle 的 Spring 設定檔中,聲明上述服務的 Spring Bean。樣本如下:
<bean id="mockRpc" class="com.alipay.gateway.spi.mpc.test.MockRpcImpl"/>在對應 bundle 的 Spring 設定檔中,聲明
com.alipay.gateway.spi.mpc.MpcServiceStarter類型的 Spring Bean。MpcServiceStarter會將所有帶有@OperationType的 bean 通過 mpaaschannel 協議註冊到指定的註冊中心。樣本如下:<bean id="mpcServiceStarter" class="com.alipay.gateway.spi.mpc.MpcServiceStarter"> <property name="registryUrl" value="${registry_url}"/> <property name="appName" value="${app_name}"/> <property name="workspaceId" value="${workspace_id}"/> <property name="projectName" value="${project_name}"/> <property name="privateKeyPath" value="${privatekey_path}"/> </bean>
Spring Boot 聲明方式
以註解的方式聲明上述服務的 Spring Bean。樣本如下:
@Service public class MockRpcImpl implements MockRpc{ }以註解的方式聲明
com.alipay.gateway.spi.mpc.MpcServiceStarter類型的 Spring Bean。MpcServiceStarter會將所有帶有@OperationType的 bean 通過 mpaaschannel 協議註冊到指定的註冊中心。樣本如下:@Configuration public class MpaaschannelDemo { @Bean(name="mpcServiceStarter") public MpcServiceStarter mpcServiceStarter(){ MpcServiceStarter mpcServiceStarter = new MpcServiceStarter(); mpcServiceStarter.setWorkspaceId("${workspace_id}"); mpcServiceStarter.setAppName("${app_name}"); mpcServiceStarter.setRegistryUrl("${registry_url}"); mpcServiceStarter.setProjectName("${project_name}"); mpcServiceStarter.setPrivateKeyPath("${privatekey_path}"); return mpcServiceStarter; } }
配置 MPC 日誌
為了便於排查問題,可酌情配置 MPC 相關日誌,下面以 log4j 配置為例。
<!-- [MPC Logger] tenant link,記錄建聯,settings 資訊 -->
<appender name="MPC-TENANT-LINK-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="${log_root}/mpaaschannel/tenant-link.log"/>
<param name="append" value="true"/>
<param name="encoding" value="${file.encoding}"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%X{remoteAddr}][%X{uniqueId}] %-5p %c{2} - %m%n"/>
</layout>
</appender>
<!-- [MPC Logger] 記錄一個流相關的資料(包括一對tenant stream <-> component stream) -->
<appender name="MPC-STREAM-DATA-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="${log_root}/mpaaschannel/stream-data.log"/>
<param name="append" value="true"/>
<param name="encoding" value="${file.encoding}"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%X{remoteAddr}][%X{uniqueId}] %-5p %c{2} - %m%n"/>
</layout>
</appender>
<!-- [MPC Logger] tenant 日誌 -->
<logger name="TENANT-LINK-DIGEST" additivity="false">
<level value="INFO" />
<appender-ref ref="MPC-TENANT-LINK-APPENDER" />
<appender-ref ref="ERROR-APPENDER" />
</logger>
<!-- [MPC Logger] component 日誌 -->
<logger name="STREAM-DATA-DIGEST" additivity="false">
<level value="INFO" />
<appender-ref ref="MPC-STREAM-DATA-APPENDER" />
<appender-ref ref="ERROR-APPENDER" />
</logger>配置應用公開金鑰
進入控制台 介面密鑰 配置頁面。
登入控制台,在 產品與服務 中選擇 移動開發平台 mPaaS 進入移動開發平台首頁。
切換至正確的工作空間後,點擊需要接入 API 服務的 App 名稱。
在左側導覽列選擇 介面密鑰,進入介面密鑰配置頁面。
點擊頁面 配置 按鈕,輸入公開金鑰內容(去掉最後的空格或空行)後提交。使用的 RSA 密鑰必須是 2048 位的,並且經過
Base64編碼。說明使用的 RSA 密鑰必須是 2048 位的,並且經過 Base 64 編碼。
產生 RSA 密鑰的方法:
安裝好
OpenSSL工具。執行以下命令,產生私密金鑰檔案
private_key_base64.der,公開金鑰檔案public_key_base64.der。* ### 1. Generate a 2048-bit RSA private key * $ openssl genrsa -out private_key.pem 2048 * * ### 2. Convert private Key to PKCS#8 format (so Java can read it) * $ openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out private_key.der -nocrypt * * ### 3. Output public key portion in DER format (so Java can read it) * $ openssl rsa -in private_key.pem -pubout -outform DER -out public_key.der * * ### 4. change to base64: * ## 產生的私密金鑰,後端應用中配置 * $ openssl base64 -in private_key.der -out private_key_base64.der * ## 產生的公開金鑰 * $ openssl base64 -in public_key.der -out public_key_base64.der * * ### remember to clear the whitespace chars and line breaks before submit!!!
註冊 API 分組
在控制台左側導覽列選擇 移動網關,進入移動網關管理頁面。
選擇 API 分組 選項卡進入 API 分組列表頁,點擊 建立 API 分組 按鈕。
在彈出的對話方塊中填寫表單資訊。
分組類型:此處選擇 MPC。
API 分組:必填,提供服務的業務系統的英文名稱。API 分組名稱要與註冊的 API 服務應用程式名稱保持一致。
Project Name:必填,預設取當前所處環境的 Project Name。
逾時時間:選填,發送請求至業務系統時的逾時時間,單位毫秒;預設值:
3000 ms。
點擊 確定 按鈕提交。如需進一步完善 API 分組相關配置,請閱讀 配置分組。
建立 API
選擇 API 管理 選項卡進入 API 列表頁,點擊 建立 API 按鈕。
在彈出的對話方塊中,API 類型 選擇 MPC,選擇 API 分組,在拉取到的 operationType 列表中勾選需要的服務,點擊 確認 按鈕。
配置 API 服務
點擊 API 列表操作列中的 配置,進入 API 配置頁面。
在 API 配置地區,點擊 修改 按鈕進行相應參數的編輯;修改完成後,點擊 儲存 按鈕。
檢查右上方開關,保證 API 服務處於 開通 狀態。只有處於開通狀態的 API 服務才能被調用。
測試 API 服務
相關資訊請參考 API 測試。
產生用戶端 SDK
相關資訊請參考 代碼產生。
結果
完成上述幾步操作,API 服務即可供用戶端調用。有關用戶端開發的更多資訊,參見下列 用戶端開發指南: