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 - [*]:服务器发生错误,用户将没法判断发出的请求是否成功。
GET /collection:返回资源对象的列表(数组) GET /collection/resource:返回单个资源对象 POST /collection:返回新生成的资源对象 PUT /collection/resource:返回完整的资源对象 PATCH /collection/resource:返回完整的资源对象 DELETE /collection/resource:返回一个空文档
RESTful API最好作到Hypermedia,即返回结果中提供连接,连向其余API方法,使得用户不查文档,也知道下一步应该作什么。html
好比,当用户向api.example.com的根目录发出请求,会获得这样一个文档。前端
{"link": { "rel": "collection https://www.example.com/zoos", #表示这个API与当前网址的关系(collection关系,并给出该collection的网址) "href": "https://api.example.com/zoos", #API路径 "title": "List of zoos", #API的标题 "type": "application/vnd.yourformat+json" #返回类型 }}
Hypermedia API的设计被称为HATEOAS。Github的API就是这种设计,访问api.github.com会获得一个全部可用API的网址列表。git
{ "current_user_url": "https://api.github.com/user", "authorizations_url": "https://api.github.com/authorizations", // ... }
从上面能够看到,若是想获取当前用户的信息,应该去访问api.github.com/user,而后就获得了下面结果。github
{ "message": "Requires authentication", "documentation_url": "https://developer.github.com/v3" }
1 from django.contrib import admin 2 3 from django.conf.urls import url, include 4 from app01 import views 5 from app02 import views 6 7 urlpatterns = [ 8 url('admin/', admin.site.urls), 9 # path('hosts/',views.HostView.as_view()), 10 url('app02/', include('app02.urls')) 11 ]
from app02 import views from django.conf.urls import url urlpatterns = [ url('^users/', views.users), url('^user/(\d+)', views.user), url('^users/', views.UsersView.as_view()), url('^user/', views.UserView.as_view()), ] app02/url
from django.shortcuts import render,HttpResponse # Create your views here. import json def users(request): response = {'code':1000,'data':None} #code用来表示状态,好比1000表明成功,1001表明 response['data'] = [ {'name':'harry','age':22}, {'name':'sam','age':10}, {'name':'jerry','age':11}, ] return HttpResponse(json.dumps(response)) #返回多条数据 def user(request,pk): if request.method =='GET': return HttpResponse(json.dumps({'name':'harry','age':11})) #返回一条数据 elif request.method =='POST': return HttpResponse(json.dumps({'code':1111})) #返回一条数据 elif request.method =='PUT': pass elif request.method =='DELETE': pass View
1 from app02 import views 2 from django.conf.urls import url 3 urlpatterns = [ 4 url('^users/', views.UsersView.as_view()), 5 url('^user/', views.UserView.as_view()), 6 ]
1 from django.views import View 2 class UsersView(View): 3 def get(self,request): 4 response = {'code':1000,'data':None} 5 response['data'] = [ 6 {'name': harry', 'age': 22}, 7 {'name': 'sam', 'age': 10}, 8 {'name': 'jerry', 'age': 11}, 9 ] 10 return HttpResponse(json.dumps(response),stutas=200) 11 12 class UserView(View): 13 def get(self,request,pk): 14 return HttpResponse(json.dumps({'name':'harry','age':11})) #返回一条数据 15 def post(self,request,pk): 16 return HttpResponse(json.dumps({'code':1111})) #返回一条数据 17 def put(self,request,pk): 18 pass 19 def delete(self,request,pk): 20 pass 21 22 views
具体使用方式参考:Django restframework的使用django