1、域名
应尽量将API部署在专用的域名下
http://api.example.com
2、版本
应该将API的版本号放入URL
http://www.example.com/app/1.0/foo
http://www.example.com/app/2.0/foo
3、路径
表示API的具体网址,每个网址代表一种资源,如果要操作什么资源,什么资源就作为路径
(1)资源作为网址,只能有名词(books),不能用动词(add_book)
(2)资源的名词,需要用复数,无论是子资源还是所有资源
例如
获取单个产品: http://127.0.0.1:8080/AppName/rest/products/1
获取所有产品: http://127.0.0.1:8080/AppName/rest/products
例如
GET: /products 返回所有商品清单
POST: /products 将产品新建到一个集合
4、HTTP动词
常用的HTTP动词有一下四个
GET(SELECT):从服务器取出资源
POST(CREATE):在服务器新建一个资源
PUT(UPDATE):在服务器更新资源
DELETE(DELETE):从服务器删除资源
例如:
GET: /zoo :列出所有动物园
POST: /zoos : 新建一个动物园
GET: /zoos/ID: 获取某个指定动物园的信息
PUT /zoos/ID :更新某某个指定动物园的信息,
DELETE /zoos/ID :删除某个动物园
5、过滤信息
记录数量过多的时候,API应该提供参数,过滤返回结果
例如:
?limit=10 指定返回记录的数量
?offset=10 指定返回记录的开始位置
?page=2&per_page=100 指定第几页,以及每页的记录数
6、状态码
200 服务器成功返回
400 用户发出的请求有误,服务器没有进行新建
401 用户没有权限(令牌、用户名、密码)
403 表示用户得到授权,但是访问被禁止
406 用户请求格式不对
7、错误处理
如果状态码是4xx,服务器就应该向用户返回出错信息,一般来说,返回的信息中将error作为键名,出错信息作为键值即可
8、返回结果
针对不同的操作,服务器向用户返回的结果应符合以下规范
GET, /collection 返回资源对象的列表
GET,/collection/resource 返回单个资源对象
POST ,/collection 返回新生成的资源对象
PUT ,/collection/resource 返回完整的资源对象
DELETE /collection/resource 返回一个空文档
写一个RESTFul风格的接口,获取一个,图书的详情
http://127.0.0.1:8000/projects/books/5/
注册路由
from django.urls import path
from django.conf.urls import url
from testdjango import views
urlpatterns = [
path('index', views.IndexView.as_view()),
url(r'^books/(?P<pk>\d+)/$', views.BookView.as_view()),
]
class BookView(View):
def get(self, request, pk):
return JsonResponse({'title': 'test'})