zoukankan      html  css  js  c++  java
  • RESTful介绍

    web框架的本质:
        socket服务端与浏览器的通信
        socket(套接字):进程间的一种通信方式 
     socket服务端功能划分:
        a.负责与浏览器收发消息(socket通信)  --------》wsgiref/uWsgi
        b.根据用户访问不同的路径执行不同的函数
        c.从HTML读取出内容,并且完成字符串的替换     ----》jinja2(模板语言)
     
    在python中web框架的分类
       框架自带a,b,c                                -------》Tornado 框架
       框架自带b,c,使用第三方的a          -------》Django 框架
       框架自带b,使用第三方的a和c        -------》 Flask  框架
     
    web 应用模式:
      前后端不分离:前端页面看到的效果都是由后端控制,由后端页面渲染或者重定向,适合纯网页应用
      前后端分离: 后端仅返回前端所需的数据,不在渲染HTMl页面,不再控制前端的效果
            在前后端分离的应用模式中,将后端开发的每一个视图都称之为接口,或者API,前端通过访问接口来对数据进程增删改查
     
    RSET:表象话状态转变(表述行状态转变)
       什么是表述性:就是指客户端请求一个资源,服务器拿到这个资源,就是表述
       资源的地址在Web中就是URL(统一资源标识符)
       资源是REST系统的核心概念,所有的设计都是以资源为核心
        
    REST架构的主要原则
      1. 对网络上的所有资源独有一个资源标志符  --------》资源
      2.  对资源的操作不会改变标识符                   --------》统一资源
      3. 同一资源有多种表现形式         ---------》URL
      4. 所有的操作都是无状态的         --------》 无状态
    符合上述RSET原则的架构就是RSETful
    RESTful:一种常见的REST应用,是遵循REST风格的Web服务,REST式的Web服务是一种ROA(面向资源的)架构
    RESTful的设计方法:
      1.域名将api(应用程序编程接口)部署在专用域名之下
      
    https://api.XXXXX.com

      2.版本

        方法1:将API的版本号放入URL中

          
    http://www.xxxx.com/app/1.0/foo
    
    http://www.xxxxx.com/app/1.1/foo
        方法2:将版本号放在HTTP头信息中,版本号在HTTP请求头信息的Accept字段中进行区分,详见:http://www.informit.com/articles/article.aspx?p=1566460
    Accept: vnd.example-com.foo+json; version=1.0
    
    Accept: vnd.example-com.foo+json; version=1.1

      3. 路径

      路径又称"终点",表示API的具体网址,且每一个网址代表一中资源

      (1)资源作为网址,只能有名词,不能有动词,而且所有的名词与数据库的表名相对应

      (2) API中的名词应该使用复数,无论子资源或者所有资源

    例如;左边是错误的,右边是正确的

    GET /rest/api/getDogs --> GET /rest/api/dogs 获取所有小狗狗 
    GET /rest/api/addDogs --> POST /rest/api/dogs 添加一个小狗狗 
    GET /rest/api/editDogs/:dog_id --> PUT /rest/api/dogs/:dog_id 修改一个小狗狗 
    GET /rest/api/deleteDogs/:dog_id --> DELETE /rest/api/dogs/:dog_id 删除一个小狗狗  

      (3)HTTP动词

         对于资源的具体操作类型,由HTTP动词表示

         常用的HTTP动词有下面四个(括号里对应的是SQL命令)    

          GET(SELECT):从服务器取出资源(一项或多项)

          POST(CREATE):在服务器新建一个资源。

          PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

          DELETE(DELETE):从服务器删除资源。

         还有三个不常用的HTTP动词。

            PATCH(UPDATE):在服务器更新(更新)资源(客户端提供改变的属性)。

            HEAD:获取资源的元数据。

            OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

       4. 过滤信息(Filtering)

        如果记录数量很多,服务器不可能将他们返回给用户,API应该提供参数,过滤返回结果

        常见的参数有:  

    ?limit=10:指定返回记录的数量
    ?offset=10:指定返回记录的开始位置。
    ?page=2&per_page=100:指定第几页,以及每页的记录数。
    ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
    ?animal_type_id=1:指定筛选条件

       5. 状态码(Status Codes)

       服务器向用户返回的状态码和提示信息,常见的有(方括号中的状态码是对应的HTTP动词): 

    200 OK - [GET]:服务器成功返回用户请求的数据
    201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
    202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
    204 NO CONTENT - [DELETE]:用户删除数据成功。
    400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作
    401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
    403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
    404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
    406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
    410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
    422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
    500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

      状态码的完全列表参见:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

      6.错误处理(Error handling)
        如果装状态码是4XX,服务器就应该向用户返回出错信息,返回的信息将error作为键名,出错信息为键值即可
    {
        error: "Invalid API key"
    }

      7. 返回结果

      针对不同操作,服务器向用户返回的结果应该符合以下规范。

    • GET /collection:返回资源对象的列表(数组)
    • GET /collection/resource:返回单个资源对象
    • POST /collection:返回新生成的资源对象
    • PUT /collection/resource:返回完整的资源对象
    • PATCH /collection/resource:返回完整的资源对象
    • DELETE /collection/resource:返回一个空文档
      8. 超媒体(Hypermedia API)
      RESTful API最好做到Hypermedia(即返回结果中提供链接,连向其他API方法),使得用户不查文档,也知道下一步应该做什么。
      在这里可以访问  https://api.github.com 做示范
      
      9.其他
      服务器返回的数据格式。尽量使用JSON
     
    关于REST API  具体描述:https://developer.github.com/v3/
    RESTful 认证机制参考:https://www.cnblogs.com/chinajava/p/5871305.html
  • 相关阅读:
    web前端的发展态势
    AngularJs 简单入门
    css代码优化篇
    git提交报错:Please make sure you have the correct access rights and the repository exists.
    Activiti工作流框架学习
    遍历map集合的4种方法
    js设置日期、月份增加减少
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    webservice_rest接口_学习笔记
    相互匹配两个list集合+动态匹配${}参数
  • 原文地址:https://www.cnblogs.com/xiaolu915/p/10532703.html
Copyright © 2011-2022 走看看