REST风格笔记

阅读: 评论:0

REST风格笔记

REST风格笔记

    这一篇主要是看了FB的覃超大大的文章,做了一些笔记和自己的思考。
    定义: 用URL来定义资源,用HTTP(GET/POST/DELETE/DETC)来描述操作。
    1. REST描述的是网络的client和server的一种交互方式,REST本身不实用,实用的是何如设计RESTful API(REST风格的网络接口)
    2. Server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络处理的核心:
        www.baidu/v1/newsfeed :获取某人的新鲜事
        www.baidu/v1/friends  :获取某人的好友列表
        www.baidu/v1/profile  :获取某人的详细信息
    3.用HTTP协议的动词来实现资源的添加,修改,删除等操作,即通过HTTP动词来实现资源的状态流转:
        GET    用来获取资源
        POST   用来新建资源(也可以用于更新资源)
        PUT    用来更新资源
        DELETE 用来删除资源
        比如:  DELETE : 删除某人的好友 (在http parameter指定好友id)
               POST   : 添加好友
               UPDATE : 更新个人资源
        禁止使用: GET 
        
        论文是这样描述的:
        GET     /tasks -- display all tasks
        POST    /tasks -- create a new task
        GET     /tasks/{id} -- display a task by ID
        PUT     /tasks/{id} -- update a task by ID
        DELETE  /tasks/{id} -- delete a task by ID
    4.Server和Client之间传递某资源的一种表现形式,比如用JSON/XML传输文本,或者用JPG来传输图片,也可以压缩HTTP传输的数据(on-wire data compression)
    5.用HTTP Status Code 来传递Server的状态信息(200 -- 成功,500 -- server 代码问题)
    
    ----------------------------------------------------
    REST : Resource Representational State Transfer  资源在网络中以某种表现形式进行状态转移
       Resource : 资源,即数据
       Representational : 某种表现形式,比如使用的是json/xml/jpeg
       State Transfer   : 状态变化,通过HTTP动词来实现
     
    首先我们要知道为什么要使用RESTful结构:
       由于各种类型Client层出不穷,RESTful可以通过一套统一的接口为web/ios/Android提供服务
    Server的API如何设计才能满足RESTful的要求呢?
    1. api version可以放在URL里面,也可以用HTTP的header
       /api/v1/
       
    2. 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
             
    3. 保证 HEAD 和 GET 方法是安全的,不会对资源状态有所改变(污染)。比如严格杜绝如下情况:      
             GET /deleteProduct?id=1
             
    4. 资源的地址推荐用嵌套结构。比如:
       GET /friends/10375923/profile
       UPDATE /profile/primaryAddress/city
       
    5. 警惕返回结果的大小。如果过大,及时进行分页(pagination)或者加入限制(limit)。HTTP协议支持分页(Pagination)操作,在Header中使用 Link 即可。  
    6. 使用正确的HTTP Status Code表示访问状态   
    7. 在返回结果用明确易懂的文本(String。注意返回的错误是要给人看的,避免用 1001 这种错误信息),而且适当地加入注释。
    8. 关于安全:自己的接口就用https,加上一个key做一次hash放在最后即可。考虑到国情,HTTPS在无线网络里不稳定,可以使用Application Level的加密手段把整个HTTP的payload加密。有兴趣的朋友可以用手机连上电脑的共享Wi-Fi,然后用Charles监听微信的网络请求(发照片或者刷朋友圈)。如果是平台的API,可以用成熟但是复杂的OAuth2,
    新浪微博这篇: /%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E
    
    spring mvc :  /
    可以好好了解一下这边文章:/
    
    
  zhihu,表示全网可见,在
  question就是函数名
  27785028是路径参数,表示题号
  当我回答你的时候,请求的是POST下的重载,我输入的内容就作为报文参数
  当知友访问这个链接的时候,浏览器接收到的http响应就是GET重载下的返回值


转载于:.html

本文发布于:2024-01-31 15:54:32,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170668767229666.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:风格   笔记   REST
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23