RESTful 规范

一、什么是RESTful

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

二、RESTful API设计

  • API与用户通信协议,总是使用

  • 域名: 尽量将API部署在专用域名(会存在跨域问题)(https://api.example.com )或(https://example.org/api/ )

  • 路径,视网络上任何东西都是资源,均使用名词表示(可以是复数)

    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:指定筛选条件
  • 状态码

    200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
    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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。更多看这里:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
    
  • 错误处理,应该返回错误信息, 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

三、基于django 实现

# 路由系统
urlpatterns = [url(r'^users/$', views.Users.as_view()),url(r'^users2/$', views.user2),
]
# 视图函数
import jsondef  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)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/qianzhengkai/p/11115955.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/277423.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/277423.shtml
英文地址,请注明出处:http://en.pswp.cn/news/277423.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php编译 ftp,无需重新编译php加入ftp扩展的解决方法

首先,进入源码目录cd php-5.2.13/ext/ftp#运行phpize生成configure/usr/local/php/bin/phpize#编译,指定php-config,注意这里的php-config,不是php.ini./configure --with-php-config/usr/local/php/bin/php-config#上面可以添加--enable-ftp,也可以不用添加#编译安…

git常用命令及分支简介

2019独角兽企业重金招聘Python工程师标准>>> 1、git基本命令 1)git add 将想要快照的内容写入缓存区 2)git status -s "AM" 状态的意思是,这个文件在我们将它添加到缓存之后又有改动 3)git commit -m 第一次…

企业私有云部署im,视频服务

1,安全问题 2,员工跨地域 3,内部视频培训 考勤申请,设备借用申请 名片申请 会议室预订 审批 内网,局域网部署 Android源码 https://github.com/starrtc/android-demo ios源码https://github.com/starrtc/ios-demo

php html 伪静态,php 伪静态(url重写)的写法

来看下面这个网页 url:http://www.jbxue.com/test.php/1,100,8630.html其实处理的脚本是test.php 参数为1,100,8630相当于test.php?a1&b1100&c8630 只不过这样的URL太难记。搜索引擎也不喜欢。真静态只是完全生成了HTML。客户端访问的时候直接输出。不用脚…

客服工作台

public Page<Record> customerDeskList(QhyfController controller) throws Exception {//获取分页信息PageInfo pageInfo controller.getPageInfo();int pageNumber pageInfo.getPageIndex();int pageSize pageInfo.getPageSize();List<String> paras new Arr…

Leetcode怎么调试java代码,在Clion上调试LeetCode代码

在Clion上调试LeetCode代码在leetcode上做题调试起来总有些不方便&#xff0c;所以查阅了一些资料后&#xff0c;按以下配置&#xff0c;自我感觉效率还行&#xff0c;分享给大家。祝大家刷题愉快。并附上自己整理的leetcode400题题表。Leetcode400题&#xff1a;notion地址依赖…

来入门一下kotlin吧

Kotlin是什么&#xff1f; Kotlin是一种在java虚拟机上运行的静态类型的编程语言&#xff0c;被称之为 Android 世界的Swift&#xff0c;由 JetBrains 设计开发并开源。 Kotlin的优势&#xff01; Kotlin可以编译成java字节码&#xff0c;也可以编译成JavaScript。方便在没有ja…

apache2 配置php,Windows配置PHP5与Apache2

windows下安装和配置PHP5与Apache2真是比linux下难多了&#xff0c;唉。这里用的是PHP Version 5.2.1和Apache HTTP Server 2.2.4&#xff0c;都是从官方网站下的。1. 下载安装&#xff0c;不多说了&#xff0c;apache一路按下去就ok&#xff0c;php连按都不用&#xff0c;解压…

ReactNative 触摸事件处理

ReactNative触摸事件处理 对RN触摸事件的捕获与冒泡机制的理解 组件A、B、C结构 组件A组件B组件C 捕获、冒泡机制 sequenceDiagram A->>A: 是否捕获&#xff1f;若是则停止向下一级传递 A->>B: B->>B: 是否捕获&#xff1f;若是则停止向下一级传递 B->&g…

CISCO网络故障排错命令总结分享

一、故障处理命令 1、show命令&#xff1a; 1&#xff09; 全局命令&#xff1a; show version &#xff1b;显示系统硬件和软件版本、DRAM、Flash show startup-config &#xff1b;显示写入NVRAM中的配置内容 show running-config &#xff1b;显示当前运行的配置内容 show b…

java input回车,用java怎样编写加减乘除,从键盘输入,例如:1+2按回车得到

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import org.junit.Test;import java.util.regex.Matcher;import java.util.regex.Pattern;public class TestCalc {Testpublic void testCalculator() {String input "11";//输入String rule "(\\d\\.?\\d*)([\\…

Java中数组在内存中的存放原理?

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/yangyong0717/article/details/79165685Java中数组被实现为对象&#xff0c;它们一般都会因为记录长度而需要额外的内存。对于一个原始数据类型的数组&#xff0c;一般需要24…

程序员如何面试才能拿到offer

一、概述 面试&#xff0c;难还是不难&#xff1f;取决于面试者的底蕴&#xff08;气场技能&#xff09;、心态和认知及沟通技巧。面试其实可以理解为一场聊天和谈判&#xff0c;在这过程中有心理、思想上的碰撞和博弈。其实你只需要搞清楚一个逻辑&#xff1a;“面试官为什么会…

php 跨区域,如何构造PHP的内容包括在非安全(http://)和安全(https://)区域以及跨多个目录使用?...

只需使用//example.com/foo.blah即可.< img id “sample-image”src “// /media/sample-image.png”/>很明显,HTTP是协议,但存在其他协议,如GOPHER,HTTPS,FTP等……而不是在gopher URL gopher&#xff1a;//example.com上,您只需链接到//example.com,协议就可以在没有它…

Generative Adversarial Learning Towards Fast Weakly Supervised Detection(CVPR2018)阅读笔记

弱监督目标检测相对于一般的目标检测任务来说&#xff0c;训练样本不需要实例级别的标注&#xff0c;只需要图片级别的标注&#xff0c;即告诉图片中有什么而不需标注位置信息&#xff0c;这种标注图片容易获取&#xff0c;能节省标注时间及精力。现有的大部分方法在进行若监督…

如何添加JWT生成的token在请求头中

前言 在我们使用JWT来做用户的验证时&#xff0c;我们登陆生成对应的token,并加入到请求的参数中发送到后台提供相关的权限校验。这个时候我们需要使用到传递请求头参数传递的问题&#xff0c;下面是两种方式。 1.ajax提交方式 1&#xff09;.方法一&#xff1a; $.ajax({ type…

Gradle 使用技巧(二) - SO/NDK过滤

引言 作为一个Android开发人员&#xff0c;so对于我们来讲是极其常见的&#xff0c;各种大厂的SDK中都包含着各种各样的so&#xff0c;而so也是apk瘦身的重要一环&#xff0c;减少so平台的数量&#xff0c;可以极大限度的减少apk的大小。 Android 中的so 先看一张官方的图&…

java两个数之间质数求法,求任意两个整数之间质数的个数的代码!!!(新手编写)...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*** Title:Calculate acount of prime number between preNum and rearNum;* Author: public* Time&#xff1a;2008.12.5 21:09:35*/import java.awt.*;import java.awt.event.*;class Arithmetic{//将计算质数个数的类封装在此类…

VMware——安装CentOS

VMware——安装CentOS 摘要&#xff1a;本文主要记录了在VMware虚拟机里安装CentOS的步骤。 下载操作系统 可以从下面的镜像地址去下载各种版本的CentOS&#xff0c;此次安装使用的版本是7.2&#xff1a; http://archive.kernel.org/centos-vault/ http://mirror.nsc.liu.se/ce…

django1.4.9 OMserverweb站点管理

1.项目setting.py配置&#xff1a; 2.项目url.py配置&#xff1a; 错误提示&#xff1a;auth_user这个表没有创建&#xff0c;那个因为,admin站点默认数据表需要迁移。执行python manage.py syncdb 会创建所有应用程序需要的数据库表4.接下来就是根据要求一步一步来&#xff1a…