快速开始

eclipse下(idea原理一样)

  • 下载或clone项目https://gitee.com/durcframework/easyopen.git 下载zip
  • eclipse右键import… -> Exsiting Maven Projects。选择easyopen目录
  • 导入到eclipse后会有三个工程,等待相关jar包下载。
  • 全部jar下载完毕后,启动easyopen-server-manual项目,由于是spring-boot项目,直接运行ManualSpringbootApplication.java即可
  • 在easyopen-sdk/sdk-java中找到SdkTest.java测试用例,运行单元测试。

    编写业务类

  • 新建一个java类名为HelloworldApi,并加上@ApiService注解
    加上@ApiService注解后这个类就具有了提供接口的能力。

  1. @ApiService
  2. public class HelloWorldApi {
  3. }
  • 在类中添加一个方法
    1. @Api(name = "hello")
    2. public String helloworld() {
    3. return "hello world";
    4. }

这个方法很简单,就返回了一个字符串,方法被@Api标记,表示对应的接口,name是接口名。

到此,一个业务方法就写完了,接下来是编写sdk并测试。

编写SDK并测试(旧)

此过程在easyopen-sdk中进行。

  • 新建Response响应类

    1. public class HelloResp extends BaseResp<String> {
    2. }
  • 新建Request请求类
    1. public class HelloReq extends BaseNoParamReq<HelloResp> {
    2. public HelloReq(String name) {
    3. super(name);
    4. }
    5. }

BaseResp<T>的泛型参数指定返回体类型,这里指定String

  • 编写单元测试

    1. public class HelloTest extends TestCase {
    2. String url = "http://localhost:8080/api";
    3. String appKey = "test";
    4. String secret = "123456";
    5. // 创建一个实例即可
    6. OpenClient client = new OpenClient(url, appKey, secret);
    7. @Test
    8. public void testGet() throws Exception {
    9. HelloReq req = new HelloReq("hello"); // hello对应@Api中的name属性,即接口名称
    10. HelloResp result = client.request(req); // 发送请求
    11. if (result.isSuccess()) {
    12. String resp = result.getBody();
    13. System.out.println(resp); // 返回hello world
    14. } else {
    15. throw new RuntimeException(result.getMsg());
    16. }
    17. }
    18. }

这样,一个完整的接口就写完了。

编写SDK并测试(新)

接口封装步骤

比如获取商品信息接口

  • 接口名:goods.get
  • 版本号:""(空字符串)
  • 参数:goods_name 商品名称
  • 返回信息

    1. {
    2. "code":"0",
    3. "data":{
    4. "goods_name":"苹果iPhoneX",
    5. "id":1,
    6. "price":8000
    7. }
    8. }

针对这个接口,封装步骤如下:

1.在model包下新建一个类来接收data部分

字段统一使用小写字母+下划线形式,如:name,user_age

  1. public class Goods {
  2. private Long id;
  3. private String goods_name;
  4. private BigDecimal price;
  5. 省略 get set
  6. }

2.在response包下新建一个返回类,继承BaseResponse

BaseResponse中有个泛型参数,填Goods类,表示返回的数据对象。

  1. public class GetGoodsResponse extends BaseResponse<Goods> {
  2. }

3.在request包下新建一个请求类,继承BaseRequest

BaseRequest中有个泛型参数,填GetGoodsResponse类,表示这个请求对应的返回类。 重写name()方法,填接口名。

如果要指定版本号,可重写version()方法,或者后续使用request.setVersion(version)进行设置

  1. public class GetGoodsRequest extends BaseRequest<GetGoodsResponse> {
  2. @Override
  3. public String name() {
  4. return "goods.get";
  5. }
  6. }

使用方式

  1. // 创建请求对象
  2. GetGoodsRequest request = new GetGoodsRequest();
  3. // 请求参数
  4. GoodsParam param = new GoodsParam();
  5. param.setGoods_name("iphone6");
  6. request.setParam(param);
  7. // 发送请求
  8. GetGoodsResponse response = client.execute(request);
  9. System.out.println("--------------------");
  10. if (response.isSuccess()) {
  11. // 返回结果
  12. Goods goods = response.getData();
  13. System.out.println(goods);
  14. } else {
  15. System.out.println("errorMsg:" + response.getMsg());
  16. }
  17. System.out.println("--------------------");

使用方式2(懒人版)

如果不想添加Request,Response,Model。可以用这种方式,返回data部分是Map<String, Object>,后续自己处理

  1. // 创建请求对象
  2. CommonRequest request = new CommonRequest("goods.get");
  3. // 请求参数
  4. Map<String, Object> param = new HashMap<>();
  5. param.put("goods_name", "iphone6");
  6. request.setParam(param);
  7. // 发送请求
  8. CommonResponse response = client.execute(request);
  9. System.out.println("--------------------");
  10. if (response.isSuccess()) {
  11. // 返回结果
  12. Map<String, Object> goods = response.getData();
  13. System.out.println(goods.get("goods_name"));
  14. } else {
  15. System.out.println("errorCode:" + response.getCode() + ",errorMsg:" + response.getMsg());
  16. }
  17. System.out.println("--------------------");