日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用 SDK

初始化框架

在使用 RPC 之前,需先初始化 mPaaS 框架:

export default class EntryAbilityStage extends AbilityStage {
 async onCreate() {
 const app = this.context;
 MPFramework.create(app);
 
 const instance: MPFramework = MPFramework.instance;
 const ctx: Context = instance.context
 }
}


生成 RPC 代碼

以下代碼由控制臺自動生成,若尚未升級控制臺,可以手動按以下格式輸入模型,如:VipInfo.ts

interface VipInfo{
 expireTime:number,
 level:number
}

模型中可以包含模型,如:userInfo.ts

interface UserInfo{
 vip:VipInfo,
 name:string,
 age:number
}

包裝參數由控制臺自動生成,如:LoginPostReq.ts

interface LoginPostReq{
  _mPaaSCustomBody:UserInfo
}

自動生成接口,如尚未升級控制臺,可以先手動配置。以 Client.ets 為例。

import {MPRpc} from '@mpaas/rpc'

class Client{//<>中為返回值類型,needsign,ispb為必傳字段
 async loginPost(req:LoginPostReq):Promise<string>{//返回類型為string
 return MPRpc.executeRpc<string>(this,{
 operationType:"com.antcloud.request.post",
 needSign:false,
 isPb:false
 },req);
 }
}

調用 RPC 接口

RPC 請求必須在子線程調用,可使用中間層中 MPRpcInterface 封裝的子線程調用接口,回調方法默認為主線程。示例代碼如下:

//前提條件初始化rpc
MPRpc.init();
function testRpc(){
  let cl = new Client();
  let account:VipInfo = {
    expireTime:1,
    level:1
  };
  let user:UserInfo = {
    vip:account,
    name:"handsome",
    age:14
  }
  let req:LoginPostReq ={
    _mPaaSCustomBody:user
  }
  cl.loginPost(req).then((result)=>{
    console.log("result")
  }).catch((e:Error)=>{
    console.log(e.message)//通過e.message可以拿到具體的報錯原因
  });
}
說明

要使用 try catch 捕獲異常,當網關異常時就會拋出,您可以根據 網關結果碼說明 查詢原因。

請求自定義配置

設置超時時間

添加 timeout 配置,代碼如下:

import {MPRpc} from '@mpaas/rpc'

class Client{//<>中為返回值類型,needsign,ispb為必傳字段
 async loginPost(req:UserInfo):Promise<string>{
 return MPRpc.executeRpc<string>(this,{
 operationType:"com.antcloud.request.post",
 needSign:false,
 isPb:false,
 timeout:1000000//設置超時時間,默認為1分鐘
 },req);
 }
}

設置請求 URL

添加 URL 配置,代碼如下:

import {MPRpc} from '@mpaas/rpc'

class Client{//<>中為返回值類型,needsign,ispb為必傳字段
 async loginPost(req:UserInfo):Promise<string>{
 return MPRpc.executeRpc<string>(this,{
 operationType:"com.antcloud.request.post",
 needSign:false,
 isPb:false,
 url:"https://xxxx.xx/xx/"http://設置請求 URL。默認為網關地址
 },req);
 }
}

設置請求 Header

添加 Header 配置,代碼如下:

import {MPRpc} from '@mpaas/rpc'

//初始化header
let headers:Map<string,string> = new Map();
headers.set("key1","value1");
headers.set("key2","value2");

class Client{//<>中為返回值類型,needsign,ispb為必傳字段
 async loginPost(req:UserInfo):Promise<string>{
 return MPRpc.executeRpc<string>(this,{
 operationType:"com.antcloud.request.post",
 needSign:false,
 isPb:false,
 header:headers //設置headers
 },req);
 }
}

自定義 RPC 攔截器

  1. 初始化攔截器。

    • preHandle 在請求前執行,參數返回 RpcInvokeContext 對象,可以進行 Header,URL,timeout 等操作,return false 表示進行攔截,rpc 接口可以 catch 異常,請求將終止。

    • postHandle 在請求后執行,參數返回 RpcInvokeContext 對象,可以獲取 response header 等操作,return false 表示進行攔截,rpc 接口可以 catch 異常,請求將終止。

    • handleException,表示遇到異常時進行攔截。

    import {RpcInterceptor,RpcInvokeContext} from "@mpaas/rpc";
    
    class interceptor implements RpcInterceptor{
     preHandle(rpcInvokeContext: RpcInvokeContext): boolean {
     return true;
     }
     postHandle(rpcInvokeContext: RpcInvokeContext): boolean {
     return true;
     }
     handleException(rpcInvokeContext: RpcInvokeContext, exception: RPCException)
     {
     throw exception;
     }
    }
    
    
  2. 配置攔截器。

    • 攔截指定 RPC。

      在自動生成的代碼中添加 interceptor 配置:

      import {MPRpc} from '@mpaas/rpc'
      import {RpcInterceptor,RpcInvokeContext} from "@mpaas/rpc";
      
      class interceptor implements RpcInterceptor{
       preHandle(rpcInvokeContext: RpcInvokeContext): boolean {
       return true;
       }
       postHandle(rpcInvokeContext: RpcInvokeContext): boolean {
       return true;
       }
       handleException(rpcInvokeContext: RpcInvokeContext, exception: RPCException)
       {
       throw exception;
       }
      }
      
      class Client{//<>中為返回值類型,needsign,ispb為必傳字段
       async loginPost(req:UserInfo):Promise<string>{
       return MPRpc.executeRpc<string>(this,{
       operationType:"com.antcloud.request.post",
       needSign:false,
       isPb:false,
       interceptor:new interceptor()
       },req);
       }
      }
    • 設置全局攔截。

      MPRpc 接口中設置:

      import {RpcInterceptor,RpcInvokeContext} from "@mpaas/rpc";
      import {MPRpc} from '@mpaas/rpc'
      
      class interceptor implements RpcInterceptor{
       preHandle(rpcInvokeContext: RpcInvokeContext): boolean {
       return true;
       }
       postHandle(rpcInvokeContext: RpcInvokeContext): boolean {
       return true;
       }
       handleException(rpcInvokeContext: RpcInvokeContext, exception: RPCException)
       {
       throw exception;
       }
      }
       
      MPRpc.addGlobalInterceptor(new interceptor());
      
      

數據加密

rawfile 目錄下添加 mpaasnetconfig.json 文件。其中:

  • type:加密類型,支持 ECC/RSA/SM2。

  • crypt: 是否開啟加密。

  • gw:使用螞蟻自研 gzip,必須設置為 true

  • pubKey:公鑰,需與加密類型匹配。

  • gwList:支持加密的 URL,多個 URL 可以用,分割,只有命中 URL 的才會參與加密。

{
 "type": "ECC",//支持ECC/RSA/SM2
 "crypt": false,//是否開啟加密
 "gw": true,//使用螞蟻自研 gzip
 "pubKey": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEx796auKwF42leWWX/cwvffrvz/M2\nd6f4ovv4G7wmu45Ed+5WBDfp7vKHB0P3il4SXmvK6be6m1MhL2kkY8Kj0Q==\n-----END PUBLIC KEY-----",
 "gwList":"https://mgw.mpaas.cn-hangzhou.aliyuncs.com/mgw.htm,http://11.164.247.80/mgw.htm"
}

數據簽名(臨時方案)

在接口文件中進行配置,needSign 設置為 truesec 中設置 appsecretsignType 中設置簽名類型,目前支持:MD5(type 為 0),SHA256(type 為 4), SHA1(type 為 1)。

import {MPRpc} from '@mpaas/rpc'

class Client{//<>中為返回值類型,needsign,ispb為必傳字段
 async loginPost(req:UserInfo):Promise<string>{
 return MPRpc.executeRpc<string>(this,{
 operationType:"com.antcloud.request.post",
 needSign:true,(默認為false)
 isPb:false,
 sec:"sss",
 signType:0 //如果不填,默認值為0 md5 (默認不填為md5)
 },req);
 }
}

數據簽名(安全圖片)

在接口文件中進行配置,needSign 設置為 truesignType 中設置簽名類型,目前支持:MD5(type 為 0),SHA256(type 為 4), SM3(type 為 5)。

生成安全圖片

當前版本尚未提供自動化工具,需客戶提供相關信息,由 mPaaS 方幫助生成。需要提供的信息包括 appIdworkspaceId應用包名appsecret 應用簽名 fingerPrint。

其中 fingerPrint 可以通過鴻蒙官方接口獲取,建議接入方使用統一簽名,否則針對不同簽名需要生成不同的圖片。

獲取 fingerPrint 的接口如下:

import bundleManager from '@ohos.bundle.bundleManager';

let info = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_SIGNATURE_INFO);
let finger = info.signatureInfo.fingerprint;

獲得安全圖片后,將其放在 rawfile 目錄下即可。

針對全局

  • 可以設置全局 secret

    MPFramework.instance.appSecret = "xxxxxx"
  • 可以利用全局攔截器進行設置。

    import {RpcInterceptor,RpcInvokeContext} from "@mpaas/rpc";
    import {MPRpc} from '@mpaas/rpc'
    
    class interceptor implements RpcInterceptor{
     preHandle(rpcInvokeContext: RpcInvokeContext): boolean {
     rpcInvokeContext.setNeedSign(true);
     rpcInvokeContext.setSignType(0);
     rpcInvokeContext.setSecret("xxxx");
     return true;
     }
     postHandle(rpcInvokeContext: RpcInvokeContext): boolean {
     return true;
     }
     handleException(rpcInvokeContext: RpcInvokeContext, exception: RPCException)
     {
     throw exception;
     }
    }
     
    MPRpc.addGlobalInterceptor(new interceptor());