RESTful API 接口

一. API的分类

    1. 进程内调用API

        调用本地开发库

    2. 本地进程间调用API

        Linux IPC

        Android IPC

    3. 远程调用API

        内网API——企业内网中的API

        外网API——面向互联网的API


二.什么是架构风格

        面向服务的架构(Service Oriented Architecture,简称SOA)

        微服务架构(Microservices Architecture)

        领域驱动设计(Domain-Driven Design,简称DDD)


三. 分布式应用的架构风格

    1. 远程调用API

        分布式对象(Distributed Objects,简称DO)

            CORBA/RMI/EJB/DCOM/.NET Remoting

        远程过程调用(Remote Procedure Call,简称RPC)

            SOAP/XML-RPC/JSON-RPC/Hessian/Burlap/Flash AMF/Dubbo RPC

            基于Google Protocol Buffer数据交换格式的各种RPC协议

            基于Apache Thrift的各种RPC协议,例如唯品会的OSP

        表述性状态移交(Representational State Transfer,简称REST)

            将HTTP协议真正作为一种 应用协议 来使用,不再需要基于HTTP的各种RPC协议

            RESTful API——符合REST架构风格要求的API


四. REST与RPC两种API调用风格的区别

    1. REST对服务器端做抽象的基本单元是 资源,RPC对服务器端做基本抽象的单元是 过程。REST的建模是以名词为核心的,RPC的建模是以动词为核心的。

    2. RPC中没有统一接口的概念。即使采用相同的协议,不同的API,设计风格可以完全不同。RPC也不支持操作语义对于中间组件的可见性。

    3. RPC中无法使用超媒体,响应的内容只包含数据。REST中使用了超媒体后,可以实现很大粒度的交互,交互的效率比RPC更高。

    4. REST支持数据流和管道,RPC不支持数据流和管道。

    5. 因为使用了平台中立的消息,RPC的耦合度会比DO要小一些,但是RPC也常常会带来客户端与服务器端的紧耦合。REST中假如使用了超媒体,客户端与服务器端可以达到最小的耦合度。

    

五. RESTful API能解决的问题

    1. 更加松耦合

        改动RESTful API比改动RPC API更容易

    2. 更好的可伸缩性

        与基于HTTP的各种RPC协议相比,对HTTP的使用更有效率

        便于利用HTTP缓存

        支持数据流和管道    易于实现分层的缓存,提高了服务器端应用的可伸缩性

    3. 有统一的设计和编程风格

        服务器端

        客户端

    4. 测试更容易,可以使用各种HTTP测试工具

        Postman/ Advanced REST Client

        curl/wget

        SoapUI Pro

        Jmeter

        ab/httperf/curl-loader

        浏览器

    5. 最好的互操作性

        基于HTTP协议本身,几乎所有编程语言都能支持


六. RESTful API不能解决的问题

    1. 不支持有状态的长连接,无法进行双向通信,实时性较差

    2. 让服务器端应用开发人员早点下班

        把轻松留给客户端应用开发人员,把困难留给自己——佛祖

        把困难留给客户端应用开发人员,把轻松留给自己——人渣

    3. 设计开发领域模型

        DDD是设计开发领域模型的利器

        DDD与REST是互补的关系,可相互支持


七. 对于HTTP的常见误解

    1. 浏览器只支持GET/POST方法

        HTML表单仅支持GET/POST方法,但是可以通过附加参数(例如_method)的方式模拟PUT/DELETE请求

        XMLHttpRequest对象GET/POST/PUT/DELETE 4种方法均可支持

    2. 未遵循HTTP协议的指导误用HTTP方法

        GET方法:安全的、幂等的

        POST方法:不安全的、不幂等的

        PUT/DELETE方法:不安全的、幂等的

    3. 过度使用GET方法

        敏感信息位于URL中,不够安全

        容易受到爬虫的伤害

    4. 过度使用POST方法

        例子:SOAP等RPC风格的调用协议

        一个方法承担了过多职责

        没有充分利用HTTP的优势

    5. HTTP是一种RPC风格的协议

        事实:HTTP其实是一种REST风格的协议

        统一接口是REST与RPC两种风格协议的主要区别

    6. HTTP是一种“传输”协议(transport protocol)

        被错误翻译为“超文本传输协议”

        事实:HTTP其实是一种“移交”协议(transfer protocol)。TCP才是传输协议,对传输这件工作已经做的很好了。

        传输协议和移交协议的区别

            传输协议做的是底层搬运比特之类的苦力活,不包含操作的语义

            移交协议做的事情比传输协议更高级,包含了操作的语义

u=2582958589,1546594997&fm=26&gp=0.jpg

  • 评论列表:
  •  题海库
     发布于 2020-10-26 21:27:08  回复该评论
  • 以自想学 php restful api。
    不知道如何下手...

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.5.2 Zero

WX:xcs345525801 QQ:345525801 Tel:19521445850 Email:xcssh868@163.com

Copyright © 2020 许承胜个人博客 版权所有 备案号:皖ICP备18014705号-1