Django 创建 REST API

REST API 设计基础

REST API 操作与 HTTP 方法的关系

请求目的 | HTTP 方法 | 相应的 SQL
------------------------------------|-----------|
创建一个资源 | POST | INSERT
读取一个现有资源 | GET | SELECT
请求现有资源的元数据 | HEAD |
更新一个现有资源 | PUT | UPDATE
更新一个现有资源的部分内容 | PATCH | UPDATE
删除一个资源 | DELETE | DELETE
返回某个 URL 所支持的 HTTP 方法 | OPTIONS |
请求回响 | TRACE |
TCP/IP 隧道(一般都未实现) | CONNECT |

注意事项:

  • 如果想实现一个只读 API,只需实现 GET 方法即可
  • 如果想实现一个可读写的 API,则必须至少实现 POST,但应该考虑用 PUT 和 DELETE
  • 为简单起见,REST API 架构通常只使用 GET 和 POST
  • 按照定义,GET、PUT 和 DELETE 是幂等的,但是 POST 和 PATCH 不是
  • 通常不实现 PATCH,但是如果 API 支持 PUT,则最好实现 PATCH
  • django-rest-framework 和 django-tastypie 都考虑了以上的所有问题

REST API 使用到的一些 HTTP 状态码及其含义:

HTTP 状态码 | 成功/失败 | 含义
-----------------------|-----------|
200 OK | 成功 | GET-返回资源;PUT-返回状态消息或返回资源
201 Created | 成功 | POST-返回状态消息或返回新建的资源
204 No Content | 成功 | DELETE-对删除请求的成功完成的应答
304 Unchanged | 转向 | 表示自上次请求以来无改动。用于检查 Last-Modified 和 Etag 以提高性能
400 Bad Request | 失败 | 返回错误消息,包括表单验证错误
401 Unauthorized | 失败 | 请求需要认证,但用户未提供相关信息
403 Forbidden | 失败 | 企图访问受限内容
404 Not Found | 失败 | 资源未找到
405 Method Not Allowed | 失败 | 企图使用未允许的 HTTP 方法
410 Gone | 失败 | 企图使用一个不再支持的方法。用于当新版本 API 发布而旧版本关闭时。移动应用需对它进行测试,并提醒用户升级
429 Too Many Request | 失败 | 用户在某时段内请求次数过多。

使用 django-rest-framework 实现一个简单的 JSON API

数据模型:


# flavors/models.py
from django.core.urlresolvers import reverse
from django.db import models

class Flavor(models.Model):
	title = models.CharField(max_length=255)
	slug = models.SlugField(unique=True)
	scoops_remaining = models.IntegerField(default=0)

	def get_absolute_url(self):
		return reverse("flavors:detail", kwargs={
   "slug":
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值