Restful API 以及对 Put/Post 区别理解

REST: Representational State Transfer
RESTful API: 符合REST设计标准的API

RESTful 设计标准:
url 对应服务器上的一种资源,e.g. 数据,图片等,所以url 中只含有名词,通过HTTP动词来描述对资源的操作方式。

url示例:https://api.example.com/v1/zoos

HTTP 动词

  • GET: 获取资源
  • POST:创建或更新资源
  • PUT: 创建或更新资源
  • DELETE:删除资源
  • HEAD:获取资源的元数据,不常用
  • OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的, 不常用

POST 和 PUT 都可以用于创建和修改资源,它们的区别是什么呢?

引用stackoverflow 上的回答:

POST:

> modify and update a resource
POST /questions/<existing_question> HTTP/1.1

> create a resource:
POST /questions HTTP/1.1

> Note that the following is an error:
POST /questions/<new_question> HTTP/1.1


PUT:

> To overwrite an existing resource:
PUT /questions/<existing_question> HTTP/1.1

> create a resource:
PUT /questions/<new_question> HTTP/1.1

在更新资源的操作上,POST 和 PUT 基本相同。

在创建资源时,PUT可以指定资源路径,POST无法指定资源路径。

因而,PUT是幂等的操作,即重复操作不会产生变化,10次PUT 的创建请求与1次PUT 的创建请求相同,只会创建一个资源,其实后面9次的请求只是对已创建资源的更新,且更新内容与原内容相同,所以不会产生变化。

POST 的重复操作截然不同,10次POST请求将会创建10个资源。

绝大多数的请求都可以通过POST实现,PUT 幂等的特性也可以在服务器端通过特殊处理来达到相同的效果,因而在API 设计时
并不一定需要兼顾 PUT 和 POST, 但需要根据实际需求进行选择。

参考:
https://www.csdn.net/article/2013-06-13/2815744-RESTful-API
https://stackoverflow.com/questions/630453/put-vs-post-in-rest

在设计Django框架的RESTful API接口时,我们需要考虑以下几个方面: 1. URL设计 2. 请求方法的选择 3. 数据的序列化和反序列化 4. 异常处理 下面我们将逐一介绍这些方面的设计。 1. URL设计 RESTful API接口的URL设计应该遵循一定的规范。一般而言,我们可以将URL按照以下的方式进行设计: ``` http(s)://host:port/api/{version}/{resource}/{resource_id}/ ``` 其中,`version`表示API版本,`resource`表示资源,`resource_id`表示资源的唯一标识符。例如: ``` http://localhost:8000/api/v1/users/1/ ``` 表示获取ID为1的用户信息。 2. 请求方法的选择 RESTful API接口支持以下四种请求方法: - GET:获取资源 - POST:创建资源 - PUT:更新资源 - DELETE:删除资源 这四种请求方法对应着CRUD操作中的"读取"、"创建"、"更新"和"删除"。 3. 数据的序列化和反序列化 在RESTful API中,数据的序列化和反序列化是非常重要的。序列化是将Python对象转换为JSON或XML等格式的过程,而反序列化则是将JSON或XML等格式的数据转换为Python对象的过程。 Django框架提供了一些强大的序列化工具,例如`django-rest-framework`。我们可以使用这些工具来实现数据的序列化和反序列化。 4. 异常处理 在RESTful API接口的设计中,异常处理也是非常重要的。我们需要对可能出现的异常进行处理,并返回适当的错误信息。 在Django框架中,我们可以使用`try...except`语句来捕获异常,并使用`HttpResponse`对象返回错误信息。例如: ```python from django.http import HttpResponse def my_view(request): try: # some code here except: return HttpResponse('Error occurred', status=500) ``` 以上是Django框架RESTful API接口设计的基本要素,通过合理的设计可以实现一个高效、易用的API接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值