我正在开发一个项目,为医院相关的数据交易提供RESTful API。我正在使用Jersey作为服务器端框架。
然而,除了公认的将代码划分为资源,模型和数据访问的概念之外,我找不到提供有关该主题的一些有用的最佳实践的信息。
有用的建议吗?
答案 0 :(得分:2)
我会尝试将我学到的一些最佳实践编译成一些主题。
如果您使用ORM,请使用JPA。它有助于保持您选择的ORM和应用程序松散耦合,即您可以轻松地在ORM之间切换。
再次,这是一种非常棒的方式,可以使您的应用程序尽可能地松散耦合。使用Guice或Spring。基本上,通过这种方式,您可以在类上注入泛型实例,而无需将它们与具体实现相结合。
对DAO很有用。您可以在JAX-RS类中注入GenericDao
(接口),但是它的真正实现是JpaDao。
此外,这对于快速切换到测试环境非常棒。在应用程序中测试某些逻辑时,您可能不想使用数据库,而只需要使用GenericDao的虚拟实现。我认为将DAO本身作为另一个重要的最佳实践。
我在我的个人资料中对此有一些疑问,但基本上使用OAuth或HTTP Basic / Digest + SSL(HTTPS)。令人惊讶的是,以您想要的方式实现安全性有点困难。您可以使用Servlet容器可能提供的安全机制或Apache Shiro,Spring Security等应用程序内部的安全机制,甚至可以手动定义安全过滤器。
大多数RESTful API都不是REST。人们常常误解这一点:REST意味着一系列约束。当不满足这些约束时,它只是一个HTTP API,这也没关系。无论如何,我建议您链接您的资源表示,以便客户端可以浏览您的API。这被称为HATEOAS,我只是在这个问题上划了一个表面。如果您想要一个真正的REST API及其所有好处,请阅读有关REST的更多信息。
这是一种特殊的最佳实践,与应用程序本身无关,而与其开发有关。实际上,Maven大大提高了生产力,特别是由于其依赖管理功能。没有它我就活不下去。
我不知道这些信息对您有用。我希望是的。 如果您需要有关任何其他主题的信息,我会编辑答案,如果我知道的话。
答案 1 :(得分:1)
除了上述答案之外,设计保持HTTP动词不在基本URL中的资源,仔细选择@ PathParam,@ QueryParam,@ FormParam和@FormDataParam注释是我强烈强调的。
对于错误处理,我返回一个带有HTTP响应代码的Response对象,以将错误传达给调用我的API的客户端。
return Response.status(<HTTPErrorCode>).entity("Error msg here or my Error Bean object as an argument").build();
使用Swagger API等文档工具可以帮助开发人员进行大量测试。
Brian Mulloy的Web API设计eBook和Vinay Sahni的post一直是我查看/更正设计的便利资源。