c/c++语言开发共享轻量级声明式的Http库——Feign的独立使用

前沿项目中我们经常会使用http工具向外部的rest接口发送请求,大家一般使用okhttp,或者java的httpclient发起,今天给大家介绍一款轻量级声明式的http库(feignclient)


前沿

项目中我们经常会使用http工具向外部的rest接口发送请求,大家一般使用okhttp,或者java的httpclient发起,今天给大家介绍一款轻量级声明式的http库(feignclient),使用起来会使我们的项目代码更整洁,利于维护!

快速开始

feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用。 但是在某些项目中,由于遗留原因,整个系统并不是spring cloud项目,甚至不是spring项目,而使用者关注的重点仅仅是简化http调用代码的编写。 如果采用httpclient或者okhttp这样相对较重的框架,对初学者来说编码量与学习曲线都会是一个挑战,而使用spring中resttemplate,又没有配置化的解决方案,由此想到是否可以脱离spring cloud,独立使用feign。

引入依赖

        <dependency>              <groupid>com.netflix.feign</groupid>              <artifactid>feign-core</artifactid>              <version>8.18.0</version>          </dependency>          <!-- https://mvnrepository.com/artifact/com.netflix.feign/feign-gson -->          <dependency>              <groupid>com.netflix.feign</groupid>              <artifactid>feign-gson</artifactid>              <version>8.18.0</version>          </dependency>

定义接口

  public interface outerservice {            @requestline("get /requesr/list?name={name}")      @headers("authorization: basic  {token}")      string request(@param(value = "name") string name,@param(value = "token") string token);  }

通过@requestline指定http请求方式及url地址,@param指定参数,可以在url或者header中使用{参数名}去填充请求参数。

配置类

  outerservice service = feign.builder()              .options(new options(1000, 3500))              .retryer(new retryer.default(5000, 5000, 3))              .target(outerservice.class, https://127.0.0.1:8085);

开始调用

  service.request("test","ad12hj3bhj1b23hj1b2");

json序列化

在项目中,我们发起的http请求往往都是json格式,feign同样提供基于json的对象转换工具,方便我们直接以对象形式交互。

接口层面指定header:

  @headers({"content-type: application/json","accept: application/json"})

指定encoder跟decoder

  ## 指定gson序列化。也可以使用jackson序列化(引入其依赖)  outerservice service = feign.builder()                  .encoder(new gsonencoder())                  .decoder(new gsondecoder())                  .options(new options(1000, 3500))                  .retryer(new retryer.default(5000, 5000, 3))                  .target(outerservice.class, https://127.0.0.1:8085);

支持我们完成声明式http接口调用

使用拦截器

在配置代理类时可以自定义拦截器

  outerservice service = feign.builder()                  .encoder(new gsonencoder())                  .decoder(new gsondecoder())                  .requestinterceptor(template -> {                      // template 可以获取/修改body,header等信息                  })                  .options(new options(1000, 3500))                  .retryer(new retryer.default(5000, 5000, 3))                  .target(outerservice.class, https://127.0.0.1:8085);

注解详解

@requestline(“get /messages/detail”)

指定请求方式跟请求url

      ## get请求      @requestline("get /messages/detail?msg_ids={msgids}")      ## post请求      @requestline("post /messages/detail?msg_ids={msgids}")

@param(“name”)

绑定参数别名,可以在requestline/body/headers等注解中通过{参数名}去获取值。

@headers({“accept:/”, “accept-language: zh-cn”})

指定请求header

@body(“{name}”)

指定请求返回body值为请求参数name

@querymap

只能标注在方法参数上。用于传递多个查询值,拼接在url后面,只能标注在map类型的参数前面,否则报错。

@headermap

同上,只是用在header上而已

以上就是轻量级声明式的http库——feign的使用的详细内容,更多关于feign的使用的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/595659.html

(0)
上一篇 2021年5月8日
下一篇 2021年5月8日

精彩推荐