`

随便记_rest理解

阅读更多

一 种思维方式影响了软件行业的发展。REST软件架构是当今世界上最成功的互联网的超媒体分布式系统。它让人们真正理解我们的网络协议HTTP本来面貌。它 正在成为网络服务的主流技术,同时也正在改变互联网的网络软件开发的全新思维方式。AJAX技术和Rails框架把REST软件架构思想真正地在实际中很 好表现出来。今天微软也已经应用REST并且提出把我们现有的网络变成为一个语义网,这种网络将会使得搜索更加智能化。

REST与HTTP协议

REST软件架构是由Roy Thomas Fielding博士在2000年首次提出的。他为我们描绘了开发基于互联网的网络软件的蓝图。REST软件架构是一个抽象的概念,是一种为了实现这一互联网的超媒体分布式系统的行动指南。利用任何的技术都可以实现这种理念。而实现这一软件架构最著名的就是HTTP协议。通常我们把REST也写作为REST/HTTP,在实际中往往把REST理解为基于HTTP的REST软件架构,或者更进一步把REST和HTTP看作为等同的概念。

今天,HTTP是互联网上应用最广泛的计算机协议。HTTP不是一个简单的运载数据的协议,而是一个具有丰富内涵的网络软件的 协议。它不仅仅能够对于互联网资源进行唯一定位,而且还能告诉我们对于该资源进行怎样运作。这也是REST软件架构当中最重要的两个理念。而REST软件 架构理念是真正理解HTTP协议而形成的。有了REST软件架构理念出现,才使得软件业避免了对HTTP协议的片面理解。只有正确的理论指导,才能避免在 软件开发的实际工作过程中少走弯路。

REST与URI(资源定位)

REST软件架构之所以是一个超媒体系统,是因为它可以把网络上所有资源进行唯一的定位,不管你的文件是图片、文件Word还是视频文件,也不管你 的文件是txt文件格式、xml文件格式还是其它文本文件格式。它利用支持HTTP的TCP/IP协议来确定互联网上的资源。

REST与CRUD原则

REST软件架构遵循了CRUD原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建(Create)、获取(Read)、更新 (Update)和销毁(DELETE)就可以完成对其操作和处理了。其实世界万物都是遵循这一规律:生、变、见、灭。所以计算机世界也不例外。这个原则 是源自于我们对于数据库表的数据操作:insert(生)、select(见)、update(变)和delete(灭),所以有时候CRUD也写作为 RUDI,其中的I就是insert。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最 基本的运算一样。

REST与网络服务

尽管在Java语言世界中网络服务目前是以SOAP技术为主,但是REST将是是网络服务的另一选择,并且是真正意义上的网络服务。基于REST思 想的网络服务不久的将来也会成为是网络服务的主流技术。REST不仅仅把HTTP作为自己的数据运输协议,而且也作为直接进行数据处理的工具。而当前的网 络服务技术都需要使用其它手段来完成数据处理工作,它们完全独立于HTTP协议来进行的,这样增加了大量的复杂软件架构设计工作。REST的思想充分利用 了现有的HTTP技术的网络能力。在德国电视台上曾经出现过一个这样的五十万欧元智力题:如何实现网络服务才能充分利用现有的HTTP协议?该问题给出了 四个答案:去问微软;WSDL2.0/SOAP1.2;WS-Transfer;根本没有。这个问题告诉我们HTTP并不是一个简单的数据传来传去的协 议,而是一个聪明的会表现自己的协议,这也许是REST = Representational State Transfer的真正含义。

实际上目前很多大公司已经采用了REST技术作为网络服务,如Google、Amazon等。在Java语言中重要的两个以SOAP技术开始的网络服务框架XFire和Axis也把REST作为自己的另一种选择。它们的新的项目分别是Apache CXF Axis2 。Java语言也制定关于REST网络服务规范:JAX-RS: Java API for RESTful Web Services (JSR 311)。相信还会出现更多与REST相关的激动人心的信息。

REST与AJAX技术

尽管AJAX技术的出现才不到两年时间,但是AJAX技术遵循了REST的一些重要原则。AJAX技术充分利用了HTTP来获取网络资源并且实现了 HTTP没有的对于异步数据进行传输的功能。AJAX技术还使得软件更好地实现分布性功能,在一个企业内只要一个人下载了AJAX引擎,其它企业内部的人 员,就可以共享该资源了。AJAX技术遵守REST准则的应用程序中简单和可伸缩的架构,凡是采用AJAX技术的页面简洁而又丰富,一个页面表现了丰富多 彩的形态。

AJAX技术还使用了一种不同于XML格式的JSON文件格式,这个意义在哪里呢?在REST软件架构下我们不能对于XML文件进行序列化处理,这 样程序员必须要使用自己的XML绑定框架。而以序列化的JavaScript对象为基础的JSON已经获得了广泛认可,它被认为能以远比XML更好的方式 来序列化和传输简单数据结构,而且它更简洁。这对REST是一个极大贡献和补充。

当前的网络应用软件还违背了REST的“无状态服务器”约束。REST服务器只知道自己的状态。REST不关心客户端的状态,客户端的状态自己来管 理,这是AJAX技术的应用之地。通过AJAX技术,可以发挥有状态网络客户机的优势。而REST的服务器关心的是从所有网络客户端发送到服务器操作的顺 序。这样使得互联网这样一个巨大的网络得到有序的管理。

REST与Rails框架

Ruby on Rails框架(简称Rails或者Rails框架)是一个基于Ruby语言的越来越流行的网络应用软件开发框架。它提供了关于REST最好的支持,也是 当今应用REST最成功的一个软件开发框架。Rails框架(从版本1.2.x起)成为了第一个引入REST作为核心思想的主流网络软件开发框架。在 Rails框架的充分利用了REST软件架构之后,人们更加坚信REST的重要性和必要性。Rails利用REST软件架构思想对网络服务也提供了一流的 支持。从最直观的角度看待REST,它是网络服务最理想的手段,但是Rails框架把REST带到了网络应用软件开发框架。这是一次飞跃,让REST的思 想从网络服务的应用提升到了网络应用软件开发。利用REST思想的simply_restful插件已经成为了Rails框架的核心内容。

REST安全性

我们把现有基于SOAP的网络服务和基于REST/HTTP网络服务作个比喻,前者是一种传统的寄信方式,而后者是现代网络的电子邮件方式。要是是 寄信和电子邮件都有病毒存在的话,传统的寄信被送到对方就很危险,而电子邮件是开发的,电子邮件供应商比如Google为我们检查了电子邮件是否有病毒。 这里并不是说明SOAP网络服务消息包含义病毒,而是说明HTTP是无法处理SOAP信息包究竟好不好,需要额外的软件工具解决这一问题,包括防火墙也用 不上和管不了。

REST/HTTP网络服务的信息包可以被防火墙理解和控制。你可以按照操作和链接进行过滤信息包,如你可以规定从外部来的只能读取(GET操作) 自己服务器的资源。这样对于系统管理员而言使得软件管理更为简单。REST的安全性还可以利用传输安全协议SSL/TLS、基本和摘要式认证(Basic und Digest Authentication)。除了这些REST自身的安全性功能外,还可以利用像基于信息的Web Services Security(JSR 155)作为REST不错的补充。  

 

分享到:
评论

相关推荐

    CCP_REST_SDK_JAVA_v2.7r.jar

    CCP_REST_SDK_JAVA_v2.7r.jar..... 适用于SMS短信发送

    CCP_REST_SMS_SDK_JAVA_v2.6.3r_java_V2_CCPRestSmsSDK.jar_

    java相关项目开发短信功能使用的jar包

    Python库 | bluedot_rest_framework-1.0.6-py3-none-any.whl

    **Python库bluedot_rest_framework 1.0.6版详解** `bluedot_rest_framework`是一个基于Python的开源库,专为开发RESTful API设计。REST(Representational State Transfer)是一种架构风格,广泛用于构建Web服务,...

    PyPI 官网下载 | django_rest_kegg-1.0.4.tar.gz

    `django_rest_kegg-1.0.4.tar.gz` 是一个在PyPI(Python Package Index)官网上可以下载的软件包,它属于Python编程语言的库。这个包的名字表明它是针对Django框架的一个扩展,用于处理与KEGG( Kyoto Encyclopedia ...

    PyPI 官网下载 | styler_rest_framework-1.4.2.tar.gz

    《PyPI官网下载:styler_rest_framework-1.4.2.tar.gz——深入解析Python库的构建与发布》 PyPI(Python Package Index)是Python社区的重要资源库,它为全球Python开发者提供了一个集中分享和下载Python软件包的...

    TMF632_Party_Management_API_REST_Specification_R19.0.0.pdf

    TMF632_Party_Management_API_REST_Specification_R19.0.0

    AWS_Securing_Data_at_Rest_with_Encryption

    AWS_Securing_Data_at_Rest_with_Encryption 是一个关于如何在AWS环境中利用加密技术保护静态数据的安全指南。静态数据加密是确保数据在存储时不受未经授权访问的关键策略,尤其是在云环境中,数据安全至关重要。本...

    云通讯CCP_REST_DEMO_Python_v2.7r.zip

    本文将深入探讨“云通讯CCP_REST_DEMO_Python_v2.7r.zip”这一官方Python SDK,旨在帮助开发者更好地理解和使用其提供的服务。 首先,我们来看一下这个SDK的基本信息。"云通讯CCP_REST_DEMO_Python_v2.7r.zip"是...

    Zend_framework_in_REST

    ### 关于《Zend Framework in REST》的关键知识点 #### 一、引言 随着互联网技术的发展,用户对网络服务的需求不断发生变化,这导致了网站架构也需要随之进行调整和优化。REST (Representational State Transfer) ...

    Putting_Java_to_REST.rar_java rest_rest

    首先,我们需要理解REST的基本原则。REST是一种设计风格,它定义了客户端和服务器之间的交互方式,强调通过资源的识别、使用HTTP方法(GET、POST、PUT、DELETE等)来操作这些资源,以及保持无状态性,使得服务能够...

    Python库 | odoo14_addon_base_rest-14.0.4.2.1-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:odoo14_addon_base_rest-14.0.4.2.1-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    REST-spring-security.rar_java rest_java security_rest_rest secu

    首先,我们需要理解REST(Representational State Transfer)是一种架构风格,常用于构建可伸缩、高性能的分布式系统。它通过HTTP协议提供服务,以资源为中心,使用标准方法(如GET、POST、PUT、DELETE等)进行交互...

    A_tool_for_automated_testing_REST_API,

    A_tool_for_automated_testing_REST_API,_generating__rest-client

    PyPI 官网下载 | json_rest-0.1.3.tar.gz

    标题中的“PyPI 官网下载 | json_rest-0.1.3.tar.gz”表明这是一个在Python Package Index(PyPI)官方源上发布的软件包,名为`json_rest`,其版本号为0.1.3,且以tar.gz格式打包。这种格式通常是用于在Linux或Unix...

    PyPI 官网下载 | bluedot_rest_framework-2.2.47-py3-none-any.whl

    《PyPI官网下载:深入理解bluedot_rest_framework-2.2.47-py3-none-any.whl》 PyPI(Python Package Index)是Python社区的重要资源库,它为全球Python开发者提供了一个集中分享和下载Python软件包的平台。在PyPI上...

    PyPI 官网下载 | automation_rest_server-2.1.10.tar.gz

    这个资源,"automation_rest_server-2.1.10.tar.gz",是从Python的官方软件包索引(PyPI)下载的,它是一个用于分发Python软件的标准平台。在Python生态系统中,开发者通常将他们的项目打包成这样的压缩文件,以便...

    rest-interface.rar_quantum computing_rest_rest interface

    通过阅读"rest-interface.pdf"文档,你可以更深入地理解Dwave如何利用REST接口来构建其Onion web服务,以及如何有效地与量子计算系统进行交互。这份文档将详细解释接口的定义、请求和响应格式,以及如何通过示例代码...

    Baidu_TTS_REST_API_Manual_restapi_帮助文档_tts_baidu_

    本手册提供的“Baidu_TTS_REST_API_Manual.pdf”详细列举了各种调用示例,包括Python、Java、JavaScript等常见编程语言的代码片段,便于开发者快速集成和测试。 **七、优化与最佳实践** 为了提高性能和用户体验,...

    Python库 | cdk_alps_spec_rest_api-0.0.9-py3-none-any.whl

    《Python库cdk_alps_spec_rest_api-0.0.9-py3-none-any.whl详解》 在Python的世界里,库是开发者的重要工具,它们提供了丰富的功能,简化了编程工作。今天我们要深入探讨的是一款名为`cdk_alps_spec_rest_api`的...

    PyPI 官网下载 | json_rest-0.1.1.tar.gz

    标题中的“PyPI官网下载 | json_rest-0.1.1.tar.gz”表明这是一个在Python Package Index(PyPI)上发布的软件包,名为`json_rest`,版本为0.1.1,其分发格式是tar.gz。PyPI是Python开发者发布自己编写的软件包的...

Global site tag (gtag.js) - Google Analytics