zoukankan      html  css  js  c++  java
  • 【API设计】RESTful API 设计指南

    RESTful API

    URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

    例如

    1. REST描述的是在网络中client和server的一种交互形式;REST本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口);
    
    2. Server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络处理的核心。比如:
    
    http://api.qc.com/v1/newsfeed: 获取某人的新鲜; 
    
    http://api.qc.com/v1/friends: 获取某人的好友列表;
    
    http://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://api.qc.com/v1/profile: 更新个人资料

    图解

    Server的API如何设计才满足RESTful要求?

    客户-服务器(Client-Server),提供服务的服务器和使用服务的客户需要被隔离对待。
    
    无状态(Stateless),来自客户的每一个请求必须包含服务器处理该请求所需的所有信息。换句话说,服务器端不能存储来自某个客户的某个请求中的信息,并在该客户的其他请求中使用。
    
    可缓存(Cachable),服务器必须让客户知道请求是否可以被缓存。(Ross:更详细解释请参考 理解本真的REST架构风格 以及 StackOverflow 的这个问题 中对缓存的解释。)
    
    分层系统(Layered System),服务器和客户之间的通信必须被这样标准化:允许服务器和客户之间的中间层(Ross:代理,网关等)可以代替服务器对客户的请求进行回应,而且这些对客户来说不需要特别支持。
    
    统一接口(Uniform Interface),客户和服务器之间通信的方法必须是统一化的。(Ross:GET,POST,PUT.DELETE, etc)
    
    支持按需代码(Code-On-Demand,可选),服务器可以提供一些代码或者脚本(Ross:Javascrpt,flash,etc)并在客户的运行环境中执行。这条准则是这些准则中唯一不必必须满足的一条。(Ross:比如客户可以在客户端下载脚本生成密码访问服务器。)
    Get:从某种资源获取信息 (获取 order list)

    例如

    GET /zoos:列出所有动物园
    POST /zoos:新建一个动物园
    GET /zoos/ID:获取某个指定动物园的信息
    PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
    PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
    DELETE /zoos/ID:删除某个动物园
    GET /zoos/ID/animals:列出某个指定动物园的所有动物
    DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
  • 相关阅读:
    ServletConfig类
    坑爹的去哪儿网订酒店经历
    python + opencv + pycharm +语音生成
    最近看到的工作要求
    pip in windows
    路由器外接硬盘做nas可行吗?
    阅读201706
    scrum学习
    学习concurrency programming进展
    Reactor/Proactor的比较 (ZZ)
  • 原文地址:https://www.cnblogs.com/jhli/p/7597575.html
Copyright © 2011-2022 走看看