Get 和 Post 方法的选择和URL的设计
HTTP 中常用的方法有 GET/POST/PUT/DELETE 等,在设计API或者表单的时候我们需要选择合适的方法。一般有两种方案:
- 只使用 GET 和 POST,GET 主要用来读取数据,POST 用来创建或者更新数据。
- RESTful的方法,GET/POST/PUT/DELETE 分别用来增删改查。
URL 的设计
为了探讨两种方案,首先我们来看一下 URL 的设计。URL 是 Universal Resource Locator 的缩写,也就是一个 URL 表示的是唯一的一个资源,所以这个资源的 id 或者说主键应该是放在 URL 路径中的。
比如一个好的设计:
http://example.com/post/1234
不好的设计
http://example.com/post?id=1234
而控制这个资源展示方式的其他字段可以作为参数:
http://exmaple.com/post/1234?lang=zh&utm_source=google
HTTP 方法的含义
好多人对于 http 方法的理解是 GET 是参数在url里,而POST是参数在 body 里面,这样理解是不对的。
在上述的两种方案中,GET 都是用来读取资源的,一般来说不要对资源进行任何更新操作,也就是没有副作用。比如说
不好的设计:
GET http://example.com/post/1234?action=delete
上面的设计意图通过GET操作来删除一个资源,这样非常不好。比如说如果浏览器具有预缓存页面的功能,那么预先读取这个链接的时候就把对应的资源删掉了。
一般来说,GET 方法还要求幂等性,也就是无论多少次操作,最终结果和操作一次都是一样的。GET 操作的参数受到 url 长度的限制,当参数超过 1k 的时候,可以使用 POST 代替。不过这时候你首先应该想一下这么多参数是不是都有用,是不是设计有问题。
POST 方法可以用来创建资源,比如说:
POST http://example.com/post/
content=xxxxxxx&author=xxxx&date=xxxx
POST 操作具有副作用,也就是说会更改服务器上的状态。另外 POST 操作一般不是幂等的,每次 POST 操作都应该创建一个新的资源。
PUT 操作用来更新资源,也是幂等的。
PUT http://example.com/post/1234
content=yyyyyy
DELETE 用来删除资源,值得注意的是,根据规范 DELETE 方法不能带有 body。
DELETE http://example.com/post/1234
Get 和 Post 方法的选择和URL的设计的更多相关文章
- jquery的add()方法扩大选择返回
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HttpServlet中,用来处理POST请求的方法是(选择1项)
HttpServlet中,用来处理POST请求的方法是(选择1项) A. doHead B. doGet C. doPost D. doPut 解答:C
- web多语言url的设计
因为项目要支持国际化,最近跟一个同事在讨论多语言版本下面url如何设计,假如我们需要支持en和cn的版本. 他倾向于支持如下的url格式,后续以格式1指代: /en/group/abc.html /c ...
- Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url
Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url 1.1. 原理流程1 2. Invoke1 3. StrutsX2 1.1. 原理流程 读取struts配 ...
- MD5 几种方法的选择
转:http://zoroeye.iteye.com/blog/2026984?utm_source=tuicool&utm_medium=referral md5加密实现方法有很多种,也导致 ...
- 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)
一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...
- AltiumDesigner画图不求人11 | 提高AD20启动速度的方法七选择手动释放工程 | 视频教程 | 你问我答
往期文章目录 AD画图不求人1 | AD20软件安装视频教程 | 含软件安装包 AD画图不求人2 | 中英文版本切换 AD画图不求人3 | 高亮模式设置 AD画图不求人4 | 双击设计文件无法启动Al ...
- UrlRewritingNet伪静态的使用方法与解决方案(URL重写)
在建站初期时,我们往往需要考虑的是使用真静态还是伪静态,这对于往后的站点配置,延展性都会产生深远的影响. 我使用伪静态的唯一目的:SEO优化.毋容置疑,伪静态在对于Spider是非常有利的,因此,我更 ...
- 写一个方法,用于解读 url 后面的请求参数,最终得到 {"a":2,"b":3,"c":4};
function getUrlParams(url){ let searchParam = url.split("?")[1]; let searchItemParams = se ...
随机推荐
- 迷你MVVM框架 avalonjs 学习教程1、引入avalon
avalon是国内最强大的MVVM框架,没有之一,虽然淘宝KISSY团队也搞了两个MVVM框架,但都无疾而终.其他的MVVM框架都没几个.也只有外国人与像我这样闲的架构师才有时间钻研这东西.我很早之前 ...
- outlook更改邮件存储路径
由于司邮箱容量磁盘配额很小,没收几封邮件就提示邮箱容量已满请删除不重要的邮件很是烦人,于是乎就想着怎么把邮件存到本地然后自动删除服务器上的邮件不做备份,这样就不会在提示邮箱容量已满了,就不用担心发不出 ...
- Redis 授权操作
[Redis 授权操作] AUTH password 通过设置配置文件中 requirepass 项的值(使用命令 CONFIG SET requirepass password ),可以使用密码来保 ...
- class.__subclasses__()
[class.__subclasses__()] Each class keeps a list of weak references to its immediate subclasses. Thi ...
- Motion Blur
[Motion Blur] 此篇介绍最简单的全局Motion Blur.算法是将当前帧与前一帧按某一比例混合.这是一个过程,例如有10帧,在第1帧中,只有第1帧原图,第2帧中有1.2帧原图,第3帧中会 ...
- Windows Python 2.7环境搭建
一.安装及修改环境变量 我安装的版本是python-2.7.15.amd64,因为2.7.9之后的版本都会安装好pip.将Python执行文件所在文件夹加入path路径,C:\Python27.将pi ...
- 使用C#进行基于PI的开发
首先欲基于PI-SDK开发PI数据库,必须先安装PI-SDK,然后再VS中新建了一个aspnet网站,添加引用:PI-SDK 1.2 Type Library 和 PISDKCommon 1.2 Ty ...
- 微交互:App成功的秘诀
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 最好的产品拥有两个很棒的特点:功能和细节.产品的功能可成功吸引到人们的注意力,而产品的细节则可留住你 ...
- idea中处理异常的快捷键
alt+Enter
- php 访问用友u8数据
<?php namespace app\api\controller; use think\Controller; use think\Db; use think\Log; /** * desc ...