1. 普通接口开发方法:(模拟用户的增删改查)

from app01 import views

urlpatterns = [
    url(r'^create_user/', views.create_user),
    url(r'^del_user/', views.del_user),
    url(r'^edit_user/', views.edit_user),
    url(r'^get_user/', views.get_user),
]

def create_user(request):
    return HttpResponse('...')

def del_user(request):
    return HttpResponse('...')

def edit_user(request):
    return HttpResponse('...')

def get_user(request):
    return HttpResponse('...')

 

缺点:如果功能越多,函数和url就越多


2. restful接口开发规范
2.1 根据method不同做不同的操作,示例:
2.1.1 基于FBV的方式

urlpatterns = [
    url(r'^user/', views.user),
]

def user(request):
    if request.method == 'GET':
        return HttpResponse('查看用户')
    elif request.method == 'POST':
        return HttpResponse('创建用户')
    elif request.method == 'PUT':
        return HttpResponse('修改用户')
    elif request.method == 'DELETE':
        return HttpResponse('删除用户')

2.1.2 基于CBV的方式

urlpatterns = [
    url(r'^user/', views.UserView.as_view()),
]

from django.views import View
class UserView(View):

    def get(self,request):
        return HttpResponse('查看用户')

    def post(self,request):
        return HttpResponse('创建用户')

    def put(self,request):
        return HttpResponse('编辑用户')

    def delete(self,request):
        return HttpResponse('删除用户')

 

 

 

3. Restful API设计
3.1 API与用户的通信协议,使用https协议
3.2 域名规范,如:
  https://api.twonss.com
  或
  https://www.twonss.com/api/

3.3 版本规范,如:
  https://www.twonss.com/api/v1/ # v1指版本,可以加在url上也可以加在请求头上

3.4 路径规范
  视网络上任何东西都是资源,均使用名词表示(可以是复数)如:
  https://www.twonss.com/api/v1/user/ # user就是一个名词,最好不要是动词

3.5 method规范
  GET :从服务器上取资源
  POST :在服务器上创建一个资源
  PUT :在服务器上更新资源(客户端提供要改变的完整资源)
  PATCH :在服务器上更新资源(客户端只提供要改变的资源)
  DELETE :从服务器删除资源

3.6 过滤条件规范,通过在url上传参的形式传递搜索条件,如:
  https://www.twonss.com/api/v1/user/?name=alex&age=22 # 指定用户名为alex,age为22的用户


3.7 状态码
  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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

更多看这里:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

只使用状态码是完全不够的,也要自定义code,两者结合,在通过httpresponse返回到前端


3.8 错误处理,当状态码是4XX时,应返回错误信息,error当做key,key可以随意指定

  {
    'error':'xxxxxx',
  }

3.9 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范。

  GET /user/:返回资源对象的列表(数组,全部)
  GET /user/1/:返回单个资源对象
  POST /user/:返回新生成的资源对象
  PUT /user/1/:返回完整的资源对象(全局)
  PATCH /user/1/:返回完整的资源对象(局部)
  DELETE /user/1/:返回一个空文档



3.10 Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
  {"link": {
    "rel": "collection https://www.example.com/zoos",
    "href": "https://api.example.com/zoos",
    "title": "List of zoos",
    "type": "application/vnd.yourformat+json"
  }}


4. restful开发规范流程分为两类:
1. 请求:https,域名规范,版本,名词,过滤条件,method方法
2. 响应:状态码,错误信息,结果集,Hypermedialink


posted on 2019-03-01 12:06  花豆豆  阅读(162)  评论(0编辑  收藏  举报