OpenApi自动生成client.md

前言

之前没有觉得OpenApi有什么特别了不得的,直到参加了花旗银行的一次面试,对方部门老总对OpenApi是非常重视,认为可以极大提升效率;后来在eBay,随着微服务化的推行,应用之间RESTful调用指数级增长,应用内调用接口的代码占了很大一部分,复用程度不高,比如一个基础应用A被10个上层应用调用,各写各的后果如下:

  • 10个应用有的用okHttp有的用apache http,不统一
  • 单元测试覆盖率要达到80%,意味着相同功能加10倍UT
  • 缺乏重试、异常处理等机制

后来试用了OpenApi,将如上10个应用的代码,代替为OpenApi生成的jar包(jar包可以统一管理,10个应用引入即可),采用的技术统一,UT只要一份,代码质量有保证!


OpenApi和swagger

OpenApi解析swagger的接口的规程,自动生成java类库,非常方便!

网易链接口调用关系.md 里面用到了自己编写的okHttpClient,但是如果能够自动生成,岂不是很方便?
swagger.md 原理是利用swagger.json,里面有详细的返回的类及哪些接口

20190924: 跑通了整体流程,最大改动:submitTime原来是offsetTime类型的,后来我改为string还是不过,后来干脆取消对这个字段的读取,就通过了;另外发现一个jobType的问题,是haowen在qm上遗漏了,已经fix了


具体操作 hands-on

  1. 先把swagger.json 下载下来
  2. 在运行
$ java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generate -i workswagger.json -g java -o /var/tmp/javaClient4Workflow

上传到ebay的qa库中,小窍门是1.0-SNAPSHOT,否则报错

[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ openapi-workflow-client ---
Downloading: https://ebaycentral.qa.ebay.com/content/repositories/snapshots/com/ebay/marketing/opclients/openapi-workflow-client/1.0-SNAPSHOT/maven-metadata.xml
Uploading: https://ebaycentral.qa.ebay.com/content/repositories/snapshots/com/ebay/marketing/opclients/openapi-workflow-client/1.0-SNAPSHOT/openapi-workflow-client-1.0-20190918.062345-1.jar
Uploaded: https://ebaycentral.qa.ebay.com/content/repositories/snapshots/com/ebay/marketing/opclients/openapi-workflow-client/1.0-SNAPSHOT/openapi-workflow-client-1.0-20190918.062345-1.jar (102 KB at 45.3 KB/sec)
Uploading: https://ebaycentral.qa.ebay.com/content/repositories/snapshots/com/ebay/marketing/opclients/openapi-workflow-client/1.0-SNAPSHOT/openapi-workflow-client-1.0-20190918.062345-1.pom
Uploaded: https://ebaycentral.qa.ebay.com/content/repositories/snapshots/com/ebay/marketing/opclients/openapi-workflow-client/1.0-SNAPSHOT/openapi-workflow-client-1.0-20190918.062345-1.pom (11 KB at 15.3 KB/sec)


平常做spring-boot项目在服务间相互调用时一般都是RestTemplate,有了这个就不用了,可以生成client端的jar包,直接调用jar包中的方法就会进行服务调用

命令

git clone https://github.com/openapitools/openapi-generator.git
cd openapi-generator
mvn clean install
java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generate \
  -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml \
  -l jaxrs-cxf-client \
  -o /var/tmp/openapi-generator/jaxrs-cxf-client

openapi-generator-cli help
用list命令尝试

config-help

meta

validate (先验证一下给的petstore的例子)

openapi-generator validate -i petstore-v3.0.yaml
$ java -jar openapi-generator-cli.jar help
usage: openapi-generator-cli <command> [<args>]

The most commonly used openapi-generator-cli commands are:
    config-help Config help for chosen lang
    generate Generate code with the specified generator.
    help Display help information
    list Lists the available generators
    meta MetaGenerator. Generator for creating a new template set and configuration for Codegen. The output will be based on the language you specify, and includes default templates to include.
    validate Validate specification
    version Show version information
### 使用美团OpenAPI获取数据的方法 #### 准备工作 为了能够顺利调用美团的OpenAPI接口,开发者需要先注册成为美团开放平台的开发者并创建应用以获得必要的凭证信息。这些凭证通常包括`AppKey`和`AppSecret`,它们用于身份验证以及签名生成。 #### 获取访问令牌 在发起任何业务请求之前,需通过OAuth授权流程来换取访问令牌(AccessToken),这一步骤对于确保安全性和合法性至关重要。具体来说,可以通过POST方式向指定URL发送包含客户端认证信息的数据包来实现这一过程[^1]。 ```http POST /oauth/access_token HTTP/1.1 Host: open.meituan.com Content-Type: application/x-www-form-urlencoded grant_type=client_credential&appid={your_app_id}&secret={your_secret} ``` 成功响应后会收到JSON格式的结果,其中包含了所需的Access Token: ```json { "access_token": "{ACCESS_TOKEN}", "expires_in": 7200, ... } ``` #### 构建带签名的HTTP请求 当准备实际查询或操作时,除了携带上述提到的有效期内的Token外,还需要构建带有合法数字签名的HTTPS GET/POST请求。此过程中涉及到的时间戳、随机字符串等参数均应严格按照官方文档说明进行设置[^2]。 例如,在尝试检索特定ID下的店铺详情前,可以按照如下模式组装URL路径及其查询参数: ```python import hashlib import time from urllib.parse import urlencode def create_signature(params_dict, secret_key): sorted_items = sorted(params_dict.items()) query_string_without_sign = urlencode(sorted_items) full_string_to_sign = f"{query_string_without_sign}{secret_key}" sign = hashlib.md5(full_string_to_sign.encode('utf8')).hexdigest() return sign timestamp = str(int(time.time())) nonce_str = 'randomString' params = { 'appkey': '{YOUR_APP_KEY}', 'timestamp': timestamp, 'nonceStr': nonce_str, } sign = create_signature(params, '{SECRET_KEY}') final_url = (f"https://api.meituan.com/open/api/shop/getShopById?" f"appkey={{YOUR_APP_KEY}}&" f"shopId={{SHOP_ID}}&" f"timestamp={timestamp}&" f"nonceStr={nonce_str}&" f"sign={sign}") ``` 请注意替换大括号内占位符为真实值,并确保整个链接中的所有组成部分都经过适当编码处理以便于网络传输。 #### 解析返回结果 最后,根据所选编程语言的不同,可以选择合适的库函数解析来自服务器端反馈的信息体&mdash;&mdash;通常是结构化的JSON对象。从中提取所需字段即可完成一次完整的交互周期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值