openapi
开放 API
集成层RESTful API 与认证
API Token 认证 + 权限控制 + 限流保护复用业务服务层逻辑,自动继承数据隔离和权限检查
RESTful API 与认证
API Token 认证 + 权限控制 + 限流保护复用业务服务层逻辑,自动继承数据隔离和权限检查
为了让第三方系统集成,需要提供开放 API。如何设计 RESTful API?如何实现 API 认证和鉴权?如何保证 API 的稳定性和向后兼容?
开放 API 控制器 - RESTful 接口
@RestController
@RequestMapping("/open-api/v1")
public class OpenApiController {
@Autowired
private WorkItemService workItemService;
/**
* 创建工作项
*/
@PostMapping("/workitems")
public ApiResponse<WorkItemVO> createWorkItem(
@RequestHeader("X-API-Token") String token,
@RequestBody WorkItemCreateDTO dto
) {
// Token 验证在拦截器中完成
WorkItemVO item = workItemService.create(dto);
return ApiResponse.success(item);
}
/**
* 查询工作项
*/
@GetMapping("/workitems/{id}")
public ApiResponse<WorkItemVO> getWorkItem(
@RequestHeader("X-API-Token") String token,
@PathVariable Long id
) {
WorkItemVO item = workItemService.getById(id);
return ApiResponse.success(item);
}
}API Token 拦截器 - 认证鉴权
@Component
public class ApiTokenInterceptor implements HandlerInterceptor {
@Autowired
private ApiTokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) {
// 获取 Token
String token = request.getHeader("X-API-Token");
if (StringUtils.isEmpty(token)) {
throw new BizException("缺少 API Token");
}
// 验证 Token
ApiToken apiToken = tokenService.validate(token);
if (apiToken == null) {
throw new BizException("无效的 API Token");
}
// 设置工作空间上下文
WorkspaceContext.setWorkspaceId(apiToken.getWorkspaceId());
return true;
}
}