查看原文
其他

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

2016-10-24 开源中国


#长按上图识别二维码 下载 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使这个很容易修复。 所有我们需要做的是添加一个异常处理程序。 不需要更改其他代码。




让我们再看看现在的返回值:




现在我们介绍到正确的响应400(错误的请求)。我们依然可以接收到和成功响应一样格式的响应。

尝试Stormpath

Stormpath提供了一个高级的,以开发人员为中心的定制服务,包括身份验证和授权,可以在几分钟内实现。 Stormpath REST API使开发人员能够快速轻松地构建各种各样的用户管理功能,否则他们必须自己编写代码,包括:

 ● 复杂稳定的权限支持, 通过缓存实现最佳性能


 ● 使用JSON Web Tokens和OAuth2进行令牌身份验证和撤销


 ● 本地支持多租户应用程序multi-tenant applications,具有对客户数据的预构建分区


 ● 全面的文档和对客户的关怀承诺 - 即使是免费的开发者帐户


 ● 健壮和高度通用的 SDKs


END


推荐阅读
程序员创造了世界,世界欠程序员一个10241024 尽情“摇”摆,High 翻全场等你来27款实用高效的腾讯热门开源项目推荐Ubuntu 16.10 安装之后必须做的 16件事

点击“阅读原文”查看更多精彩内容

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存