Spring RESTful 最佳实践 - 需要示例/教程。

7

简短的故事:

我正在寻找一份RESTful服务设计“最佳实践”的教程或者github项目示例。

详细的故事:

我正在阅读Spring官方提供的网络服务设计和实现教程:http://spring.io/guides/tutorials/rest

这个教程提供了一个小型项目的示例。他们在这个项目中使用了“六边形架构”和大量“事件”类。经过阅读,我注意到这个示例看起来有点过度设计了,毕竟只是一个示例项目。除了测试之外,有超过50个类。这真的是此类服务的“最佳实践”吗?如果不是,还有更好的示例吗?


请勿要求我们为您寻找教程。请使用谷歌、雅虎或必应搜索引擎进行搜索。 - Sotirios Delimanolis
3
我确实进行了广泛的搜索。问题在于如何分辨哪些是好的例子,哪些不是。当官方教程对我来说似乎有问题时,我不得不问自己是否只是自己想太多了。这是一种理智检查。 - Turar
我认为你提供的教程只是详细介绍了REST的相关内容。无论如何,这有点(如果不是完全)离题了。 - Sotirios Delimanolis
1
有用的:https://github.com/gothinkster/spring-boot-realworld-example-app - Alireza Fattahi
1个回答

34

我无法向您推荐教程,但可以根据使用Spring MVC编写RESTful服务的经验提出一些建议。

  1. 将控制器与业务逻辑分开。在控制器中应关注错误处理,还有可能是授权。初始时,控制器方法可能非常简单,只需调度到相应的业务逻辑方法即可。这并不是坏事,很快您的控制器将随着客户端接口问题而增长。

  2. 谈到错误处理,编写RESTful服务的难度很大。您肯定需要一种方法以结构化数据的形式通知客户端发生了错误。我认为,这应该是所有响应的一部分。您需要决定哪些错误会返回信息,哪些错误会保持安静并仅记录日志等。

  3. 您可能会有一些用于请求和响应的数据对象。将它们打包到一个独立的JAR文件中。添加这个JAR文件中的接口,由控制器实现。还可以添加一个简单的第二个实现,用于调用您的服务。这样,您就有了一个客户端库。发布它,让Java客户端满意。

  4. 即使现在您有了一个漂亮的Java客户端库,也不要忘记使用curl测试您的服务,并记录如何以这种方式使用它,进行简单的调用。让非Java用户满意。

  5. 有各种库用于通过模拟Web服务器的更多或更少内部来“单元”测试控制器。这些非常有用,但不要局限于它们。具有qa环境,在其中完全部署您的服务,并具有qa应用程序,该应用程序将向qa环境上的服务实例发送真实的请求,并分析其响应。

  6. 尽量保持不同调用之间的简单和一致。例如,每个响应都可以包含相同的“错误”部分,其中包含相同的字段,以结构化的可编程形式提供关于出了什么问题的信息。

  • REST是一种很好的抽象,但它也有限制:在实际应用中,/delete.json?id=3对不同的服务可能会产生非常不同的影响。不要期望你的客户端能够猜测出“add”和“delete”在你的特定情况下会意味着什么,因为他们可能与你预期的不同。相反,在你的文档中提供一些关于你的服务在后台会做什么的信息。不幸的是,我们还没有达到只通过非常薄的接口知识来进行组件通信并保持对其内部不可知的阶段。


  • 谢谢,这非常有帮助! - Turar

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接