zoukankan      html  css  js  c++  java
  • java高级架构师教程-REST API的可发现性和HATEOAS

    图灵学院  java高级架构师教程

     

    本文将重点介绍REST API的可发现性,HATEOAS以及由测试驱动的实际场景。

    为什么要使API可发现

    API的可发现性是一个没有得到足够值得关注的主题,因此很少有API能够正确使用它。如果正确完成,它也可以使API不仅具有RESTful和可用性,而且还具有优雅性。

    要了解可发现性,您需要了解作为应用程序状态引擎(HATEOAS)的超媒体约束; REST API的这种约束是关于来自超媒体(真正的超文本)的资源上的动作/转换的完全可发现性,作为应用程序状态的唯一驱动因素。

    如果API通过会话本身来驱动交互,具体来说就是通过Hypertext,则不会有文档,因为这会强制客户端做出实际上在API上下文之外的假设。

    总之,服务器应该具有足够的描述性,以指示客户端如何仅通过超文本使用API,在HTTP会话的情况下,可以是链接头。

    可发现方案(由测试驱动)

    那么REST服务可被发现意味着什么呢?在本节中,我们将测试使用JUnit测试可发现性的各个特征。由于REST服务已被安全保护,因此每个测试首先需要在使用API之前进行身份验证。

    发现有效的HTTP方法

    使用无效的HTTP方法使用REST服务时,响应应该是405 METHOD NOT ALLOWED; 此外,它还应该帮助客户端使用响应中的Allow HTTP Header来发现该特定Resource允许的有效HTTP方法:

    java高级架构师教程,java架构师培训,java高级培训,图灵学院

    发现新创建资源的URI

    创建新资源的操作应始终使用Location HTTP Header 包含响应中新创建的资源的URI 。如果客户端对该URI执行GET,则该资源应该可用:

    java高级架构师教程,java架构师培训,java高级培训,图灵学院

    测试遵循一个简单的场景:创建一个新的Foo资源,并使用HTTP响应来发现现在可以访问资源的URI。然后测试更进一步,在该URI上执行GET以检索资源并将其与原始资源进行比较,以确保它已被正确保留。

    发现获取该类型的所有资源的URI

    当我们获取任何特定的Foo资源时,我们应该能够发现我们接下来可以做什么:我们可以列出所有可用的Foo资源。因此,检索资源的操作应始终在其响应中包含URI,以获取该类型的所有资源,再次使用链接头:

    java高级架构师教程,java架构师培训,java高级培训,图灵学院

    请注意,此处显示了extractURIByRel的完整低级代码- 负责通过rel关系提取URI 。

    此测试涵盖REST中链接关系的棘手主题:检索所有资源的URI使用rel=”collection”语义。

    这种类型的链接关系尚未标准化,但已被多个微格式使用并提议用于标准化。使用非标准链接关系开启了关于RESTful Web服务中微格式和更丰富语义的讨论。

    其他潜在的可发现URI和微格式

    其他URI可能通过链接头发现,但只有现有的链接关系类型允许,而不会转移到更丰富的语义标记,如定义自定义链接关系,Atom发布协议或微格式,这将是主题另一篇文章。

    例如,客户端应该能够在对特定资源执行GET时发现URI以创建新资源; 遗憾的是,模型创建语义没有链接关系。幸运的是,标准做法是创建的URI与获取该类型的所有资源的URI相同,唯一的区别是POST HTTP方法。

    案例结论

    我们已经看到REST API是如何从根中完全发现的,并且没有先验知识 - 这意味着客户端能够通过在根上执行GET来导航它。继续前进,所有状态更改都由客户端使用REST API在表示中提供的可用和可发现的转换(因此是Representational State Transfer)来驱动。

    本文介绍了REST Web服务上下文中可发现性的一些特征,讨论了HTTP方法发现,创建和获取之间的关系,发现获取所有资源的URI等。

    尽管Java架构师学习路线已经分享给大家,但有多少人能认真的去践行,这个就难说了。互联网寒冬已经到来,作为程序员,更应在此时提高自己,有着更高远的追求。

    篇幅有限,如果需要更详细的java架构师学习路线资料可加博主qq:1993712276,或者去图灵官网查看

  • 相关阅读:
    C#大小写字母转换函数
    vss安装及服务器端、客户端配置图文教程
    JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)
    LoadRunner 录制IE 8卡死
    LoadRunner 11 安装及破解
    C#开发中常用加密解密方法解析
    Oracle 11g安装图文攻略
    IIS添加域名
    SQL2008中Merge的用法
    在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery)
  • 原文地址:https://www.cnblogs.com/tulingxueyuan/p/13714612.html
Copyright © 2011-2022 走看看