专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
程序猿  ·  清晰的、模块化的编码风格 ·  昨天  
OSC开源社区  ·  国内AI适配再下一城:天数智芯加入,Deep ... ·  3 天前  
程序员小灰  ·  第一期AI特训,我们要发车了! ·  5 天前  
51好读  ›  专栏  ›  OSC开源社区

[译文]构建 Spring Boot API 的 5 个实用技巧

OSC开源社区  · 公众号  · 程序员  · 2016-10-24 08:32

正文


#长按上图识别二维码 下载 OSC 客户端参与活动#


本译文来自开源中国翻译频道,由 leoxu, 花间_拾零, Tony 协作翻译完成。


每一个 API 开发者都在寻找能更加安全的管理他们的应用程序的方法,而不用牺牲速度或者放弃新功能的实现。为此,我们最近更新了核心的 Stormpath 产品 —— 这是我们的 REST API , 它可以借助 Spring Boot 来使用。一直以来我们都会利用很多重要的效率工具,它们值得人们用来借助 Spring Boot 开发一个API。

许多团队都会发现要对其 API进行认证管理和访问控制有点困难,因此我们就想到要分享一些源自我们在进行迁移的过程中所积累的架构原则,让你能更轻松的管理你的 Spring Boot API。

注意: 下面我们会使用命令行工具 httpie (https://github.com/jkbrzt/httpie) 来进行示例的练习。

1.  使用 @RESTController 注解

可以使用 @RestController (而不是简单的 @Controller) 来确保你是要返回一个Java 对象,而不是到一个 HTML 模板的引用。如下所示:




执行命令 : http -v localhost:8080



2.  利用 POJO 向 JSON 自动转换的便利

Spring Boot 会自动地为你将 POJO(plain old Java classes)转换成JSON!





执行命令 : http -v localhost:8080




3.  使用带有自动绑定服务的依赖注入

不需对 Java 对象进行复杂的设置、配置或者初始化,自动绑定服务就能够对你的业务逻辑进行抽象。




这个示例利用了 Stormpath 来在你认证通过后返回一个个性化的问候语。要进行联系你首先需要设置一个 Stormpath 账户,入口在这里。如果你按照这里的指示将你的 Stormpath API Key 文件放到指定的位置 (~/.stormpath/apiKey.properties) ,就不需要再做其它的什么事情了!

启动应用并执行这个命令  :http -v localhost:8080




接下来我们需要进行认证,这样我们才可以进入到我们的示例,因此我们会联系使用 Stormpath 内置的 OAuth 2.0 功能来进行认证并获得一条个性化的信息。你要确保已经在管理员控制台为你的 Stormpath 应用程序创建了一个用户。想要详细了解 Java SDK 中 Stormpath 的 OAuth支持,可以看看我们的《Java 产品文档》。




响应消息:





做完之后,要保存这个访问令牌供我们的应用程序使用:




现在,让我们使用认证信息来再一次访问我们的应用程序:



现在,多亏了依赖注入的帮助,我们就可以得到来自控制器可以访问到的服务的个性化响应信息了。

4.  Spring 安全层

Spring安全层在Spring应用上增加了授权过程,使得应用可以容易地决定谁可以访问,访问哪些内容. 安全层在用户组成员和细粒度的权限的基础上,使用声明式配置语法和注解来限制用户访问方法.

如果你有兴趣学习更多知识,我曾写过一篇相关教程 in-depth Stormpath + Spring Security tutorial .。同时,我们有另外一个非常不错的教程 Spring Security + Spring Boot WebMVC app in our open-source Java SDK project ,带领你从零开始实现完整功能,教程文档可在此处找到.

默认情况下, 在Spring Security中任何资源都应该被锁定,Stormpath Spring Security 示例很好地遵循了这一惯例.。想要使用Stormpath尝试SpringSecurity , 你只需使用Stormpath进行如下配置:



http.apply(stormpath())是唯一需要配置的基于Stormpath的Spring Security. 下面两行是使用“/”结束符允许未认证用户访问资源.

现在我们看下安全框架影响控制器的方法之一:




在这个例子中, 由于我们知道认证后进入方法的的方式是唯一的,没必要对账号执行非空检查。例如:




因为没有认证重定向到/login.如果我像之前一样使用访问令牌,它看起来像这样:




5.  统一的错误处理

好的api设计需要你的API返回一个通用的响应,尤其是出现问题的时候。这使得解析和编组JSON到Java对象更加容易和更可靠。

让我们举个例子。 在这里,我们拟个标题:Custom-Header。 如果该标题不存在,则会抛出异常:




如果我们看正常的流程,一切都没有问题:




如果我们没有Custom-Header 这个标题呢?




那么,这里有什么问题? 首先,它不符合我们已经建立的响应格式。 此外,它会导致500(内部服务器错误)错误,这样的情况很糟糕。

幸运的是,Spring Boot使这个很容易修复。 所有我们需要做的是添加一个异常处理程序。 不需要更改其他代码。










请到「今天看啥」查看全文