AngularJSREST

作者:覃超
链接:https://www.zhihu.com/question/27785028/answer/48096396
来源:知乎
作品权归小编所有。商业转发请联系作者得到授权,非商业转发请注脚出处。

— 简洁版 —

0.
REST不是”rest”这些单词,而是多少个单词缩写。但就算这么些单词说出来,也惊慌失措知晓在说怎样-_-!! (不是要贬低人,是本身要好也清楚困难);
1.
REST描述的是在网络中client和server的一种相互方式;REST本身不实用,实用的是怎么设计
RESTful API(REST风格的网络接口);

  1. Server提供的RESTful
    API中,URL中只行使名词来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络拍卖的着力。比如:

http:// class=”visible”>api.qc.com/v1/newsfeed:
获取某人的非正规;
http:// class=”visible”>api.qc.com/v1/friends:
获取某人的相知列表;
http:// class=”visible”>api.qc.com/v1/profile:
获取某人的详细音信;

3.
用HTTP协议里的动词来促成资源的拉长,修改,删除等操作。即经过HTTP动词来兑现资源的情景扭转:

GET 用来赢得资源,
POST 用来新建资源(也得以用于立异资源),
PUT 用来更新资源,
DELETE 用来删除资源。

比如:

DELETE
http://api.qc.com/v1/friends:
删除某人的好友 (在http parameter指定好友id)
POST
http://api.qc.com/v1/friends:
添加好友
UPDATE http:// class=”visible”>api.qc.com/v1/profile:
更新个人资料

禁止使用: GET http:// class=”visible”>api.qc.com/v1/deleteFri class=”invisible”>end

图例:

AngularJS 1
4.
Server和Client之间传递某资源的一个表现格局,比如用JSON,XML传输文本,或者用JPG,WebP传输图片等。当然还足以压缩HTTP传输时的数量(on-wire
data compression)。

  1. 用 HTTP Status Code传递Server的事态新闻。比如最常用的 200
    表示成功,500 表示Server内部错误等。

 

重在音信就那样点。最终是要解放思想,Web端不再用事先典型的PHP或JSP架构,而是改为前段渲染和附带处理大致的商务逻辑(比如AngularJS或者BackBone的局部样例)。Web端和Server只利用上述定义的API来传递数据和改动多少状态。格式一般是JSON。iOS和Android不问可见。总而言之,Web,iOS,Android和第三方开发者变为平等的角色通过一套API来一头消费Server提供的劳务。

— 详细版 —

先说REST名称
REST:REpresentational State Transfer =
直接翻译:表现层状态转移。那些中文直译常常出现在不少博客中。尼玛哪个人听得懂“表现层状态转移”?那是人话吗?
第一,之所以晦涩是因为前边主语被去掉了,全称是 Resource Representational
State
Transfer:通俗来讲就是:资源在网络中以某种表现格局举办状态转移。分解开来:

Resource:资源,即数据(前边说过网络的主导)。比如
newsfeed,friends等;
Representational:某种表现格局,比如用JSON,XML,JPEG等;
State Transfer:状态变化。通过HTTP动词达成。

REST的出处
罗伊 菲尔德ing的完成学业随想。那哥们加入规划HTTP协议,也是Apache Web
Server项目(可惜现在早就是 nginx 的全球)的co-founder。PhD的毕业院校是
UC
Irvine,Irvine在加州,有着充分的日光和美丽的沙滩,是出名的富人区。Oculus
VR 的总部就坐落于此(虚拟现实眼镜,被FB收购,CTO为Quake和Doom的小编 JohnCarmack)。
议论周知,杂文都是生硬难懂的。当年在CMU阅读的时候,很多学科都会布署周周两篇的Paper
review。现在回看起来每趟写Paper
review都是自家但是难熬的时候。REST那篇大学生杂谈毫无疑问更甚。
舆论地址:Architectural Styles and the Design of Network-based Software
Architectures

REST章节:Fielding Dissertation: CHAPTER 5: Representational State
Transfer
(REST)

REST那章我初读了,整个杂谈没有读完 =_=

AngularJS 2
RESTful API
实用的是如何科学地领略 RESTful架构和设计好RESTful API。

 

先是为何要用RESTful结构吧?
我们都驾驭”明朝”网页都是前端后端融在一道的,比如事先的PHP,JSP等。在之前的桌面时代难题不大,不过近年来移动互联网的进步,各连串型的Client司空见惯,RESTful可以经过一套统一的接口为
Web,iOS和Android提供服务。别的对于大规模平台来说,比如Facebookplatform,新浪开放平台,微信公共平台等,它们不须要有显式的前端,只须求一套提供服务的接口,于是RESTful更是它们最好的取舍。在RESTful架构下:
AngularJS 3
Server的API怎样设计才满意RESTful需要?
率先是简洁版里面的那几点。外加一些附带的 best practices:

  1. URL root:

https:// class=”visible”>example.org/api/v1/*
https:// class=”visible”>api.example.com/v1/*

  1. API versioning:
    可以置身URL里面,也可以用HTTP的header:

/api/v1/

  1. URI使用名词而不是动词,且推荐用复数。
    BAD
  • /getProducts
  • /listOrders
  • /retrieveClientByOrder?orderId=1

GOOD

  • GET /products : will return the list of all products
  • POST /products : will add a product to the collection
  • GET /products/4 : will retrieve product #4
  • PATCH/PUT /products/4 : will update product #4
  1. 管教 HEAD 和 GET
    方法是安全的,不会对资源情形有所改观(污染)。比如严俊杜绝如下情形:

GET /deleteProduct?id=1

  1. 资源的地址推荐用嵌套结构。比如:

GET /friends/10375923/profile
UPDATE /profile/primaryAddress/city

6.
警醒重返结果的深浅。如果过大,及时开展分页(pagination)或者参与限制(limit)。HTTP协议协助分页(Pagination)操作,在Header中运用
Link 即可。

  1. 拔取科学的HTTP Status Code表示访问状态:HTTP/1.1: Status Code
    Definitions

    8.
    在回去结果用强烈易懂的公文(String。注意再次回到的一无所长是要给人看的,防止用
    1001 那种错误信息),而且适合地参加注释。
    9.
    关于安全:自己的接口就用https,加上一个key做四次hash放在最终即可。考虑到国情,HTTPS在有线网络里不安静,可以行使Application
    Level的加密手段把整个HTTP的payload加密。有趣味的朋友可以用手机连上电脑的共享Wi-Fi,然后用查尔斯监听微信的网络请求(发照片或者刷朋友圈)。
    倘倘诺阳台的API,可以用成熟可是复杂的OAuth2,博客园博客园那篇:授权机制表明

各端的现实性完毕
如上面的图所示,Server统一提供一套RESTful
API,web+ios+android作为同样公民调用API。各端发展到现行,都有一套相比成熟的框架来帮开发者一举两得。

— Server —
推荐: Spring MVC 或者 Jersey 或者 Play Framework
教程:
Getting Started · Building a RESTful Web
Service

— Android —
推荐: RetroFit (
Retrofit
) 或者 Volley ( mcxiaoke/android-volley ·
GitHub

谷歌(Google)官方的被block,就不贴了 )
教程:
Retrofit โ€” Getting Started and Create an Android
Client

敏捷Android开发连串网络篇之Retrofit

— iOS —
推荐:RestKit ( RestKit/RestKit ·
GitHub

)
教程:
Developing RESTful iOS Apps with
RestKit

— Web —
推荐随便搞!可以用重量级的AngularJS,也得以用轻量级 Backbone + jQuery
等。
教程:http://blog.javachen.com/2015/01/06/build-app-with-spring-boot-and-gradle/

参考:
[1]: Some REST best
practices

[2]: GitHub API
v3

[3]: tlhunter/consumer-centric-api-design ·
GitHub

末段附带一个彩蛋:
非死不可台球表演:
台球1—在线播放

相关文章