这次打算整理一期关于微服务系统中接口调用中的相关内容。
在大多数的互联网集群当中,百晓生通常都是会采用http接口的方式供前端去进行调用,而后端之间的服务调用主要还是会采用rpc的方式进行相互通信。这些相互通信的服务之间可以借助比较常见的如dubbo,grpc,feign,或者一些自研的通信框架。
那么今天我们主要来从http接口的调用规范聊起。
HTTP接口调用设计
在大多数互联网企业的微服务项目中,开发团队都可能会是采用SpringBoot作为web框架去部署应用,大多数时候都会采用到以下注解:
-
@RequestMapping
-
@GetMapping
-
@PostMapping
-
@DeleteMapping
-
@PutMapping
@RequestMapping
这个注解是Spring框架的web模块中比较早期的一款注解,声明了某个接口支持http协议的调用,同时内部支持设置请求的方法类型,url,以及application-context类型。
使用案例:
例如我们对整个controller的context-type类型都统一设置为application/json的格式,丰告网便会对整个controller内部的context-type都进行格式的设置,例如我们设置了一个只支持x-www-form-urlencoded格式请求类型的Controller。
@RestController
@RequestMapping(value = "/form-url",consumes = "application/x-www-form-urlencoded")
public class FormUrlEncodedController {
@GetMapping(value = "/test-url")
public void testUrl(){
System.out.println("this is testUrl");
}
}
那么当http请求携带了不符合预期的格式时,便会抛出以下异常:
至于其他的几款注解,其实按照名字来看,就很容易理解其内部具体定义了。
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
主要的差别就在于能够接收的请求类型有所出入。
统一接口的请求类型
如果整个controller都希望统一接收参数的类型以及响应的类型,那么可以在controller的头部做如下声明:
@RestController
@RequestMapping(value = "/simple",<