第四篇:服务端接入

1. 阿里云端接入

1.1 为什么阿里云端

       一砂为了开发者接入IFAA能力更加方便推出了阿里云端接入的方式。相比于经典模式需要自己实现注册状态存储查询等逻辑,需要自己来提供服务器,开发服务端应用程序等等。使用阿里云端接入只需要发送给指定接口客户端报文就可以,这大大缩短了开发的流程,提高了接入的效率。

1.2 阿里云端接入准备

        首先,登入阿里云市场账号完成实名认证。商品链接如下:

https://market.aliyun.com/products/57000002/cmapi00037211.html?spm=5176.10695662.1996646101.searchclickresult.6e9b2840ezEUAl

        一个账号前一千次是免费的,点击立即购买按钮提交订单后系统会为账号开通调用权限。在商品页的下方是关于接口的说明,可以看到一共包括IIFAA查询,IIFAA注册初始化,IIFAA注册,IIFAA认证初始化,IIFAA认证,IIFAA注销,IIFAA指位更新七个接口,开发者根据业务需要来调用这七个接口。

1.3调试接口

通过阿里云提供的接口调试工具可以更加方便的来调用api接口从而熟悉接口的报文,也更加直观的可以看到返回结果。

点击【去调试】按钮,可以通过阿里云的控制台来调用api,点击后会跳转到如下页面

点击调试页面上的【发送请求】按钮,右边的控制台窗口会出现发送请求后的响应信息,信息类似如下所示:

Request:Url: https://ifaa.market.alicloudapi.com/capHeader: {"Host":"ifaa.market.alicloudapi.com","X-Ca-Timestamp":"1584595342195","gateway_channel":"http","X-Ca-Request-Mode":"debug","X-Ca-Key":"203787004","X-Ca-Stage":"RELEASE","x-ca-nonce":"2da14458-435a-498d-91ce-ae7eaf98bafd","Content-MD5":"XUFAKrxLKna5cZ2REBfFkg==","Content-Type":"application/octet-stream; charset=utf-8","Authorization":"APPCODE xxxxxxxxxxxx"}Body:"hello"Response:200Date: Thu,19Mar202005:22:22 GMTContent-Type: application/json;charset=UTF-8Transfer-Encoding: chunkedConnection: keep-aliveKeep-Alive:timeout=25Vary: Accept-EncodingExpires:0Cache-Control: no-cache, no-store,max-age=0, must-revalidateSet-Cookie:XSRF-TOKEN=9477281d-5cd9-4089-bfa0-b35f1c99abfe;Path=/X-XSS-Protection:1;mode=blockPragma: no-cacheX-Frame-Options: DENYX-Ca-Request-Id: 66EA0F4C-A427-49C0-AABD-B2F2A2A93470X-Content-Type-Options: nosniff{"ver":"1.0.0","code":"1999","msg":"系统异常,请联系管理员。"}

返回的报文格式中字段如下所示:

字段名称类型说明

verString版本号

codeString错误码

msgString错误信息

并且edis所定义的错误信息如下所示:

错误码错误信息描述

0000设备已注册设备已注册

2036设备未注册设备未注册

2003参数错误。userId: NULLuserId为空

2004参数错误。transactionType: NULLtransactionType为空

2006参数错误。packageId: NULLpackageId为空

2007参数错误。platform: NULLplatform为空

2056调用KMS失败。错误内容:%s

1999系统异常,请联系管理员。系统异常

1.4 接入服务端IIFAA能力

有了云市场的edis服务,接入IIFAA能力变得更加简单。无论什么语言只需要保证传来的的Json字符串符合edis的接口要求就可以了,下面调用api以使用广泛的java语言为例。通常构造请求报文可以使用阿里云提供的报文请求类以及自定义报文请求两种方式。

1.4.1阿里云提供HttpUtils请求类

要想使用阿里云的HttpUtils请求类,首先来到github代码库:

https://github.com/aliyun/api-gateway-demo-sign-java

其中HttpUtils类文件位于:

https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java

其中此类的依赖参考以下pom文件:

https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml

当引用了HttpUtils请求类后调用方法如下所示:

Stringhost="https://ifaa.market.alicloudapi.com";Stringpath="/cap";Stringmethod="POST";Stringappcode="xxxx";//你自己的AppCodeMapheaders=newHashMap();headers.put("Authorization","APPCODE "+appcode);//最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105Mapquerys=newHashMap();Stringbodys="";try{HttpResponseresponse=HttpUtils.doPost(host,path,method,headers,querys,bodys);System.out.println(response.toString());//获取response的body//System.out.println(EntityUtils.toString(response.getEntity()));}catch(Exceptione) {e.printStackTrace();        }

至此已经完成了api的调用,只需要按照返回的报文格式来解析响应报文完成自己的业务逻辑即可。

1.4.2 使用其他方法来构造请求报文

       除了使用aliyun提供的代码之外,也可以自定义请求方法。 以使用spring boot框架中feign client 组件来构造请求报文为例:

首先在pom中引入依赖:

org.springframework.cloudspring-cloud-starter-openfeign

在spring boot入口类声明启用feign client:

@SpringBootApplication@EnableFeignClientspublicclassApplication{publicstaticvoidmain(String[]args) {SpringApplication.run(Application.class,args);    }}

现在可以构造一个feign client:

@FeignClient(name="aliyunClient",url="https://ifaa.market.alicloudapi.com")publicinterfaceAliyunClient{@PostMapping(value="/{path}")StringsendRequest(@PathVariable("path")Stringpath,@RequestHeaderMapheaders,@RequestBodyMapbody);}

       其中sendRequest方法中path参数为路径变量path值会反映到url后的路径上,参数headers为请求头,body为请求体。 使用feign client时候,通过自动填装技术获得aliyunClient对象然后调用其方法,代码如下所示:

privateAliyunClientaliyunClient;@AutowiredpublicvoidsetAliyunClient(AliyunClientaliyunClient) {this.aliyunClient=aliyunClient;    }voidapi(){Stringpath="/cap";Stringappcode="xxxx";//你自己的AppCodeMapheaders=newHashMap();headers.put("Authorization","APPCODE "+appcode);//例如:最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105Mapbody=newHashMap();body.put("property","value");//json字段try{Stringresponse=aliyunClient.sendRequest(path,headers,body);System.out.println(response);}catch(FeignExceptione) {System.out.println(e.contentUTF8());//返回响应System.out.println(e.status()+"");//http status ,如 404        }//do some process    }

关于feign client更多使用指导参照官方文档说明:

`

https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html

你可能感兴趣的:(第四篇:服务端接入)