class BlogModel {
String authorUserID;
...
}
class BlogDomain extends BlogModel {
private UserInfo authorInfo;
}
// 读取 BlogModel,然后去用户服务根据用户 ID 去取用户信息,最终拼接成 BlogDomain 返回
List<BlogDomain> getBlogList(int start, int limit) {
List<BlogModel> blogModelList = dao.query(start, limit);
// 批量去取
Set<String> authorUserIDs = blogModelList.stream()
.map(BlogModel::getAuthorUserID)
.collect(Collectors.toSet());
Map<String, UserInfo> authorUserInfoMap = Collections.emptyMap();
if (!auditUserIDs.isEmpty()) {
authorUserIDs = userService.select(authorUserIDs);
}
return blogModelList.stream().map(blogModel -> {
BlogDomain blogDomain = new BlogDomain();
BeanUtils.copyProperties(blogModel, blogDomain);
blogDoamin.setAuthorInfo(authorUserInfoMap.get(blogModel.getAuthorUserID()));
return blogDomain;
}).collect(Collectors.toList());
}
REST 响应根据 HTTP 状态码作为错误码是不够的,一般接口还会再定义一个自定义的错误码(我看即使那些 GG,FB,INS,Twitter 的 API 文档也是这么玩的)。如果有了自定义的错误码,其实那个 HTTP 状态码实际显得有些鸡肋,唯一的作用就是使服务端和客户端的编码逻辑稍微变得更加复杂。
文档,现在用的最主要的文档工具就是 Swagger/OpenAPI,但是实际上会发现,无论是 code 自动生成文档,还是文档生成 code(客户端还好,主要是服务端,生成的 code 基本上没法用)都不好用。最后还是自己的手写文档。这样工作量又多了一些。
光这些问题,就让编码过程变得很烦了,也许可能需要一个能代替现有方式的东西。比如,GraphQL,gRPC 或者其他的东西。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.