restful规范(建议)

没用restfui规范之前:

     接口开发示例:    

        urlpatterns = [
               url(r'^get_order/', views.get_order),
               url(r'^add_order/', views.add_order),
               url(r'^del_order/', views.del_order),
               url(r'^update_order/', views.update_order),
              ]


        def get_order(request):
          return HttpResponse('')


        def add_order(request):
          return HttpResponse('')


        def del_order(request):
          return HttpResponse('')


        def update_order(request):
          return HttpResponse('')

用了restfui规范之后:

     接口开发,根据method不同做不同的操作,示例:       

        基于FBV:
          urlpatterns = [
                  url(r'^order/', views.order),
                ]

          def order(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('删除订单')
       基于CBV:
          urlpatterns = [
                  url(r'^order/', views.OrderView.as_view()),
                ]

          class OrderView(View):
            def get(self,request,*args,**kwargs):
              return HttpResponse('获取订单')

            def post(self,request,*args,**kwargs):
              return HttpResponse('创建订单')

            def put(self,request,*args,**kwargs):
              return HttpResponse('更新订单')

            def delete(self,request,*args,**kwargs):
              return HttpResponse('删除订单')

 

restful是什么:

  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
  • 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

restful API设计:

 (1)API与用户的通信,总是使用HTTPs协议

 (2)域名  

          https://api.example.com                         尽量将API部署在专用域名(会存在跨域问题)

     https://example.org/api/                         API很简单

 (3)版本

    URL,如:https://api.example.com/v1/  (v1表示版本1)

    请求头                                                    跨域时,引发发送多次请求

(4)路径,网络上任何东西都是资源,均使用名词表示(可复数)

    https://api.example.com/v1/zoos

    https://api.example.com/v1/animals

    https://api.example.com/v1/employees

 (5)method

    GET      :从服务器取出资源(一项或多项)

    POST    :在服务器新建一个资源

    PUT      :在服务器更新资源(客户端提供改变后的完整资源)

    PATCH  :在服务器更新资源(客户端提供改变的属性)

    DELETE :从服务器删除资源

 (6)过滤,通过在url上传参的形式传递搜索条件

    https://api.example.com/v1/zoos?limit=10:指定返回记录的数量

    https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置

    https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数

    https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序

    https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件

(7)状态码

     链接:http://www.cnblogs.com/meng0410/articles/8244509.html

(8)错误处理,状态码是4xx时,应返回错误信息,error当做key。

    {

       error: "Invalid API key"

      }
(9)返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范:
    GET /collection:返回资源对象的列表(数组)
    GET /collection/resource:返回单个资源对象
    POST /collection:返回新生成的资源对象
    PUT /collection/resource:返回完整的资源对象
    PATCH /collection/resource:返回完整的资源对象
    DELETE /collection/resource:返回一个空文档
 (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"
    }}
posted @ 2018-03-05 19:04  星雨5213  阅读(145)  评论(0)    收藏  举报