第一章 restframework——restful规范

第一章 restframework——restful规范

什么是restful(what):

  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
  • 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

restful的API设计:

  • API与用户的通信协议,总是使用HTTPs协议
  • 域名 
    • https://api.example.com                         尽量将API部署在专用域名(会存在跨域问题)
    • https://example.org/api/                        API很简单
  • 版本
    • URL,如:https://api.example.com/v1/
    • 请求头                                                  跨域时,引发发送多次请求
  • 路径,视网络上任何东西都是资源,均使用名词表示(可复数)
    • https://api.example.com/v1/zoos
    • https://api.example.com/v1/animals
    • https://api.example.com/v1/employees
  • method
    • GET      :从服务器取出资源(一项或多项)
    • POST    :在服务器新建一个资源
    • PUT      :在服务器更新资源(客户端提供改变后的完整资源)
    • PATCH  :在服务器更新资源(客户端提供改变的属性)
    • DELETE :从服务器删除资源
  • 过滤,通过在url上传参的形式传递搜索条件
    • https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
    • https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置
    • https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数
    • https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序
    • https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件
  • 状态码与method对应关系
OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
NO CONTENT - [DELETE]:用户删除数据成功。
INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
  • 错误处理,应返回错误信息,error当做key
  • {
        error: "Invalid API key"
    }
  • 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范。
  • GET /collection:返回资源对象的列表(数组)
    GET /collection/resource:返回单个资源对象
    POST /collection:返回新生成的资源对象
    PUT /collection/resource:返回完整的资源对象
    PATCH /collection/resource:返回完整的资源对象
    DELETE /collection/resource:返回一个空文档
  • Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
  • {"link": {
      "rel":   "collection https://www.example.com/zoos",
      "href":  "https://api.example.com/zoos",
      "title": "List of zoos",
      "type":  "application/vnd.yourformat+json"
    }}

    摘自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html

过去不使用restful协议的数据增删改查(都使用get)

books表增删改查
  /books/ books
  /books/add/ addbook
  /books/(\d+)/change/ changebook
  /books/(\d+)/delete/ delbook

使用restful协议的数据增删改查

books表增删改查
  /books/         -----get     books   ----- 返回当前所有数据
  /books/         -----post   books   ----- 返回提交数据 
  /books/(\d+)  -----get    bookdetail  ----- 返回当前查看的单条数据 
  /books/(\d+)  -----put    bookdetail  ----- 返回更新数据 
  /books/(\d+)  -----delete    bookdetail  ----- 返回空

class  Books(View):
    def get(self,request):
        pass  # 查看所有书籍
    def post(self,request):
        pass  # 添加书籍

class  BooksDetail(View):
    def get(self,request,id):
        pass  # 查看具体书籍
    def put(self,request,id):
        pass  # 更新某本书籍
    def delete(self,request,id):
        pass  # 删除某本书籍

 基于django实现restful

路由urls:

urlpatterns = [
    url(r‘^users/$‘, views.Users.as_view()),
    url(r‘^users2/$‘, views.user2),

]

视图views:

import json

# FBV
def  user2(request):
    if request.method==‘GET‘:
        dic = {‘status‘:200,‘name‘: ‘lqz2‘, ‘age‘: 18}
        return HttpResponse(json.dumps(dic))
    elif request.method==‘POST‘:
        dic = {‘status‘: 200, ‘msg‘: ‘修改成功‘}
        return JsonResponse(dic)

#CBV
class Users(View):
    def get(self, request):
        dic = {‘status‘:200,‘name‘: ‘lqz‘, ‘age‘: 18}
        return HttpResponse(json.dumps(dic))

    def post(self, request):
        dic = {‘status‘: 200, ‘msg‘: ‘修改成功‘}
        return JsonResponse(dic)

原文地址:https://www.cnblogs.com/neymargoal/p/9777186.html

时间: 2024-10-08 16:49:41

第一章 restframework——restful规范的相关文章

Restful framework【第一篇】RESTful 规范

什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态 REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” 所有的数据,

Django框架 --CBV源码分析、restful规范、restframework框架

一.CBV源码分析 1.url层的使用CBV from app01 import views url(r'book/',views.Book.as_view()) 2.as_view方法 as_view是一个类方法,实际上是一个闭包函数(内层函数包含对外层作用域的使用) 请求来了以后,调用as_view方法,调用函数中的view方法,view方法是调用了dispatch方法 @classonlymethod def as_view(cls, **initkwargs): def view(req

(16/06/09) 跟兄弟连学PHP 第一章总结:HTTP协议与WEB的关系。

前言-PREFACE  让学习成为一种习惯. PHP是一种开源免费的开发语言,具有程序开发速度快,运行快,技术本身学习快等快捷性的特点,无疑是当前WEB开发中最佳的编程语言. 第一章:LAMP网站构建 1.HTTP协议与WEB的关系 1)HTTP是超文本传输协议.协议是指双方遵循的规范.HTTP协议就是浏览器和服务器的进行'沟通'的一种规范.一次HTTP操作成为一个事务,客户机和服务器通过请求和响应完成一次会话,工作过程分为5步 (1)客户端连接到WEB服务器     一个HTTP客户端(浏览器

实体框架6.0(Recipes)翻译系列 1 -----第一章 开始使用实体框架1

微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF版本更新太快,没人愿意去花时间翻译国外关于EF的书籍.使用Entity Framework开发已经有3年多了,但用得很肤浅,最近想深入学习,只好找来英文书<Entity Framework 6 Recipes>慢慢啃.首先需要说明的是,我英文不好,只是为了学习EF.把学习的过程写成博客,一是督促自

《head first html与css、xhtml》——第六章--标准,规范,第七章--XHTML

2015-04-01 19:48:22 第六章--标准,规范 1.依据html 4.01严格的规范,内联元素必须包含在块元素中,当然,不这样做也能通过. 2.标准的网页加载速度更快,更容易在其他移动设备上运行好,同时,也容易被因视觉障碍而是用屏幕读取器的用户接受. 3.花时间去看错误的信息,你就会开始了解到他们的窍门. 4.只使用块元素填充<body>(<h1><h2>...<p><div><blockquote>..) 5.块元素在

《软件工程》-第一章随笔

本章主要是软件的概述.软件是计算机程序,规程以及运行计算机系统可能需要的相关文档和数据.软件主要分为两种,一种是面向市场公开的通用软件,另一种是在某个特定约束条件下开发的定制软件.软件是复杂的,不可见的,不断变化的,且在软件技术日趋成熟的今天,大多数软件仍然是定制的,而非已有构件组装而成.20世纪70年代开始,计算机应用从简单的数据计算到涉及到各种商务领域.20世纪90年代至今,网络的迅速发展使软件系统从封闭走向开放.而随着软件的迅速发展,软件的开发也随之遇到了一系列软件危机.软件日趋成熟,软件

【网络原理】期末复习笔记 第一章 概述

第一章 概述 1.1 网络在现代的作用 21世纪三化:数字化(声音信号数字化处理,为了电脑处理和传输).网络化.信息化 三网:电信网络(电话).有线电视网络(同轴电缆.从有线电视公司到用户).计算机网络(因特                 网.其他网络) 1.2 计算机网络的重要功能       连通性:彼此联通.交换信息     ·远程桌面客户端:mstsc(Microsoft terminal services client) Win10.win7是单用户操作系统,只允许一个用户同时操作.

Java学习记录第一章

学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言--->高级语言(面向过程的语言和面向对象的语言)总而言之就是从人类比较难识别的字符串向人类自然语言靠近使代码的可读性越来越高. Java的发展过程:1991年Sun公司为了抢占市场先机,成立了一个称为Green的项目小组,帕特里克.詹姆斯·高斯林.麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕

《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述 (转)

微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF版本更新太快,没人愿意去花时间翻译国外关于EF的书籍.使用Entity Framework开发已经有3年多了,但用得很肤浅,最近想深入学习,只好找来英文书<Entity Framework 6 Recipes>第二版,慢慢啃.首先需要说明的是,我英文不好,只是为了学习EF.把学习的过程写成博客,一