Re: [请益] 所以,到底什么是RESTful API?

楼主: lion741205 (狮子)   2019-03-11 18:54:48
要了解RESTful,必须与RPC及SOAP一起对比
Remote Procedure Call (RPC):起源于1976年,允许Client远端呼叫Server的子程式,
然后将执行结果返回给Client;当时的传输资料常使用二进制格式,为了统一资料传输格
式,随后出现了XML-RPC, XML作为资料交换语言的RPC机制。
Simple Object Access Protocol (SOAP):起源于1998年,由于RPC经常被Firewall及
Proxy Server阻挡,为解决兼容及安全性问题,采用HTTP(起源于1989)是更好的方法,
SOAP还提供了一套标准方法让程式间可以互相通信。可以简单把SOAP当作RPC+XML+
HTTP(POST only)+有状态的通信方法。
Representational State Transfer (REST/RESTful)起源于2000年,由于SOAP过于复杂且
依赖状态,REST提倡使用标准的HTTP中的四种动作GET、PUT、POST及DELETE,以及Uniform
Resource Identifier (URI)来指定资源,降低开发的复杂性。可以简单把REST当作PRC+
XML+HTTP(GET,PUT,POST,DELETE)+URI+无状态的通信方法。
发展趋势:
REST风格相比XML-RPC及SOAP更加简洁易用,而JSON资料交换语言相较XML更加轻量,目前
大多数的Web Service都采用REST+JSON作为传输方法。
※ 引述《thefattiger (LawTea)》之铭言:
: 因为Web_Design板满冷清的所以来这边问
: 若不适当请告知
: 小弟不是Web领域的, 但也难免会碰到相关的东西
: 常听到写Web App的人会讲到这个名词
: 但查了一下资讯却还是摸不著头绪
: 估狗RESTful API 大概都是讲到一下几点
: 1.资源要用URL表示
: 这不是本来就这样的吗?
: 还是指别滥用query string?
: 关于query string与RESTful实在众说纷纭, 查了很久也找不到令人信服的答案
: 2.Server要回传对应的Http Status Code
: 这不是也本来就这样的吗?
: 3.用GET/POST/PUT等动词表达对资源的操作
: 意思是说, 本来只有GET/POST用法, 但其实还有PUT/PATCH/DELETE等等
: 应该要善加利用这些动词把操作分得更清楚?
: 4.Stateless
: 这也很常看到,但Http不是本来就Stateless的吗?
: 要记录state一般不都借助于session和cookie?
: 还是不RESTful的Api会有某种state?
: 5.资源传递的格式
: 这部分似乎不在RESTful的范围,可以是json也可以是XML
: 有Web领域的前辈可以指点一下吗?
: RESTful真的很神秘, 问身边的人每个认为的重点都不太一样
作者: qrtt1 (有些事,有时候。。。)   2019-03-11 19:18:00
其实要加入以 resource 为中心的设计思想,不然花比较protocol 或风格,只会有‘好简单’ vs ‘好麻烦’的结果
作者: WunoW (WunoW)   2019-03-11 19:19:00
现在用restful+json都觉得理所当然,反而觉得以前的人用那些像是脑袋有洞
作者: qrtt1 (有些事,有时候。。。)   2019-03-11 19:20:00
s/花/光/ 。动词是针对特定资源的状态变更不要一直觉得别人脑袋有洞啊,过去那些东西是给企业端用的他们有现成的工具可以快速整合,跟新创圈或新开的小公司要自己手刻是不同的情境啊。试着上网查一下有没有旧的教学http://bit.ly/2SUdNaN 竟然连 esb tool 都能接 rest 了啊
作者: seedli (带骨的火腿)   2019-03-11 19:46:00
SOAP相较REST还是有他的优势,许多EDI的协定还是使用SOAP
作者: jej (晃奶大馬桶)   2019-03-11 21:21:00
记得那时候restful刚起来的时候还有一堆老外问说soap和json要问我们系统要用哪个如果用json要怎么加签之类的...现在都用的理所当然的
作者: darklose (疝气aPerl)   2019-03-12 15:54:00
推这篇
作者: pichubaby (Pichu)   2019-03-16 17:09:00
推这篇

Links booklink

Contact Us: admin [ a t ] ucptt.com