/easy-http

easy to contact http rest api

Primary LanguageJavaApache License 2.0Apache-2.0

easy-http

Maven Central License

easy to contact http rest api

介绍

  • 基于Spring mvc@RequestMapping@GetMapping@PostMapping@RequestParamRequestHeaderPathVariable等注解扩展
  • 自动扫描接口实例化并托管至Spring,参考自Mybatis自动扫描Mapper
  • 需要声明的接口和Server端保持一致即可完美对接

快速开始

引入

创建Maven项目

<dependency>
    <groupId>vip.justlive</groupId>
    <artifactId>easy-http</artifactId>
    <version>${lastVersion}</version>
</dependency>

Gradle

compile 'vip.justlive:easy-http:$lastVersion'

使用方式

// 创建接口

@HttpClient
@RequestMapping("https://api.github.com")
public interface GithubApi {

  @RequestMapping(method = RequestMethod.GET)
  String root();


  @GetMapping("/repos/{owner}/{repo}")
  Repository repos(@PathVariable String owner, @PathVariable String repo);

  @Data
  class Repository {

    private Long id;
    private String name;
    private int forks;
    private int watchers;
  }
}

// 使用${xx}获取配置
@HttpClient
@RequestMapping("${thirdpart.api.url}")
public interface ThirdpartApi {

  @PostMapping("/api/token")
  RespVo<AccessToken> token(@RequestParam String appKey, @RequestParam String appSecret);

  @PostMapping("/api/account")
  RespVo<Account> account(@RequestHeader String accessToken, @RequestBody Account account);

  @Data
  @Accessors(chain = true)
  class AccessToken {

    private String accessToken;
    private Long expiresIn;
  }

  @Data
  @Accessors(chain = true)
  class Account {

    private String name;
    private BigDecimal balance;
  }
}

// 增加扫描(默认为当前类所处包)

@HttpClientScan("com.xxx")
@Configuration
public class HttpClientAutoConfiguration {

}

// 使用

@Slf4j
@Component
public class Demo {

  @Autowired
  private GithubApi githubApi;

  @Autowired
  private ThirdpartApi thirdpartApi;

  @PostConstruct
  private void init() {
   
    String result = githubApi.root();
    log.info("githubApi root {}", result);

    Repository repository = githubApi.repos("justlive1", "easy-http");
    log.info("githubApi repos {}", repository);
    
    AccessToken token = thirdpartApi.token("key", "secret").getData();
    log.info("thirdpartApi token {}", token);

    Account account = new Account().setName("aa").setBalance(new BigDecimal("12.3"));
    account = thirdpartApi.account(token.getAccessToken(), account).getData();
    log.info("thirdpartApi account {}", account);
  }
}