首页 > 其他分享 >2.Restful规范

2.Restful规范

时间:2022-11-09 21:25:27浏览次数:85  
标签:code name Restful 规范 api https data users

restful规范是一套主流的API规范,目的是将前后端统一规范。节省二者的沟通成本, 提高开发效率,常见的规范有以下9种

1.https协议

在实际项目部署中,使用https协议代替http,目的是为了让接口更加安全

当然https在项目开发中是不相关的

2.域名

对于后端的开发人员,在实现接口的时候,尽可能在域名上加上api的标识,如:

https://api.example.com
https://www.example.com/api/

 

 

 

3.版本

对于后端开发人员,API要体现出来版本,便于后期进行版本的管理

https://api.example.com/v1/
https://v1.api.example.com/
https://www.example.com/api/?version=1.1
或者放在请求头中
...

 

4.路径

restful规范中认为网络上的一切都是资源,针对资源可以进行增删改查的操作。URL重要使用名词,使用请求方法进行动作上的区分

https://api/users/v1/             GET方法           用户列表
https://api/users/v1/            POST方法          添加用户
https://api/users/(\d+)/v1/       GET方法           获取单条数据
https://api/users/(\d+)/v1/       DELETE方法        删除单条数据
https://api/users/(\d+)/v1/       PUT方法           更新单条全部数据
https://api/users/(\d+)/v1/ PATCH方法 更新单条局部数据

 

5.请求方法

根据方法不同进行不同的操作

GET:   在服务器获取资源(一项或者多项)
POST:  在服务器新建一个资源
PUT:   在服务器上更新资源
PATCH: 在服务器上局部更新资源
DELETE:在服务器上删除资源

 

6.搜索条件

在URL中通过参数的形式携带搜索条件,常用GET方法

https://api.example.com/v1/users?limit=10                指定返回的数据数量
https://api.example.com/v1/users?offset=10               返回指定记录的其实位置
https://api.example.com/v1/users?page=2&per_page=10      指定第几页以及每页的数量

 

 

7.相应数据

针对不同的操作,服务器响应的结果是有所不同的

URL  方法  描述 返回的数据
/users/ GET 获取数据列表 [{’name‘:'victor'},{'name':'大山'}]
/users/ POST 添加数据 返回新添加的数据对象{’name‘:'victor'},
/users/(\d+)/ GET  获取单条数据 {’name‘:'victor'}
/users/(\d+)/ DELETE  删除数据 返回一个空对象
/users/(\d+)/ PUT 更新数据 返回更新后的数据{’name‘:'victor'}
/users/(\d+)/ PATCH 局部更新 返回更新后的数据{’name‘:'victor'}

 

 

 

 

 

当然上面也不会是绝对的,每个公司都会根据自己的业务需求进行适当的调整

8.状态码

API接口除了数据以外,还会携带一些状态码,表示请求的状况,状态码也是公司自行设定的

{
    code:400,
    error:'xxx'
}

 

9.错误处理

当后端响应请求的时候,如果发生错误,也需要将错误返回给客户端

{
    code:400,
    error:'xxx'
}

 

10.案例

该案例仍然是使用Django的写法

路由:

from django.contrib import admin
from django.urls import path
from student import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/<str:version>/students', views.showUsers),
    path('users/<str:version>/students/<int:pk>', views.showUsers),
]

 

视图函数

 1 from django.shortcuts import render
 2 from django.http import JsonResponse
 3 
 4 
 5 # Create your views here.
 6 def showUsers(request, version, pk=None):
 7     # 获取版本
 8     print(version)
 9     # 没有用户ID
10     if not pk:
11         if request.method == "GET":
12             print('获取用户列表')
13             data = {
14                 'code': 0,
15                 'data': [
16                     {
17                         'id': 1, 'name': 'kunmzhao'
18                     },
19                     {
20                         'id': 2, 'name': 'victor'
21                     },
22                     {
23                         'id': 3, 'name': '大山'
24                     },
25                 ]
26             }
27         elif request.method == "POST":
28             # 从请求体中获取数据,添加导数据库
29             data = {
30                 'code': 0,
31                 'data': {'id': 4, 'name': 'jerry'}
32             }
33         else:
34             data = {
35                 'code': 100,
36                 'error': '请求错误'
37             }
38     else:
39         if request.method == "GET":
40             # 获取pk对应的用户数据
41             data = {
42                 "code": 0,
43                 "data": [{"id": 3, "name": 'kunmzhao'}],
44             }
45         elif request.method == "DELETE":
46             # 删除指定pk下的用户
47             data = {
48                 "code": 0,
49             }
50         elif request.method == 'PUT':
51             # 更新数据到数据库
52             data = {
53                 "code": 0,
54                 "data": [{"id": 4, "name": 'sunny'}],
55             }
56         elif request.method == "PATCH":
57             # 更新数据到数据库
58             data = {
59                 "code": 0,
60                 "data": [{"id": 5, "name": 'wind'}],
61             }
62         else:
63             data = {
64                 "code": 400,
65                 "error": "请求错误",
66             }
67     return JsonResponse(data)

 

在上面的案例中我们使用的是Django中的FBV写法,使用CBV写法如下

路由

from django.urls import path
from web import views

urlpatterns = [
    path("api/<str:version>/students/", views.Users.as_view()),
    path("api/<str:version>/students/<int:pk>", views.Users.as_view()),
]

 

视图

from django.http import JsonResponse
from django.views import View


class Users(View):
    def get(self,request, version, pk=None):
        if not pk:
            # 获取用户列表
            info = {
                "code": 0,
                "data": [{"id": 1, "name": 'kunmzhao'}],
            }
            return JsonResponse(info)
        # 获取pk对应的用户数据
        info = {
            "code": 0,
            "data": [{"id": 3, "name": 'victor'}],
        }
        return JsonResponse(info)

    def post(self, request,version):
        # 新增用户,将用户添加到数据库中
        info = {
            "code": 0,
            "data": [{"id": 2, "name": 'victor'}],
        }
        return JsonResponse(info)

    def delete(self, request,version,pk):
        # 删除指定pk下的用户
        info = {
            "code": 0,
        }
        return JsonResponse(info)

    def put(self, request,version,pk):
        # 更新数据到数据库
        info = {
            "code": 0,
            "data": [{"id": 4, "name": 'sunny'}],
        }
        return JsonResponse(info)

    def patch(self, request, version, pk):
        # 更新数据到数据库
        info = {
            "code": 0,
            "data": [{"id": 5, "name": 'wind'}],
        }
        return JsonResponse(info)

 

标签:code,name,Restful,规范,api,https,data,users
From: https://www.cnblogs.com/victor1234/p/16874413.html

相关文章

  • Day05.2:常量及变量命名规范
    常量常量:一旦被初始化后不能更改的的值。被设定死了的变量finaltypeVARNAME=value;finaldoublePI=3.14;final数据类型常量名=值;常量名字符使用大写final作为......
  • RPC请求&响应参数规范
    §0.有话先说0.0“开卷有益”-->如下是《码出高效:Java开发手册》书中5.3节的截图,文中提到“公司内部跨应用远程服务调用优先考虑使用Result对象来封装错误码、错误描述信......
  • 京东云开发者|代码评审的价值和规范
    评审目的代码评审的目的就是为了保证公司整体代码的健康状况随着不断迭代,始终保持一个较高的水平,所有在评审中使用的工具和流程都应是为此目的而设计的。评审原则鼓励......
  • web前端编码规范/编码习惯❤️
    web前端编码规范/编码习惯​​一、CSS文件命名规范​​​​二、页面结构命名​​​​三、导航命名​​​​四、功能命名​​​​五、CSS书写规范-性能优化方案​​​​六、H......
  • 新的 ES2022 规范终于发布了,我总结了8个实用的新功能
    英文|https://betterprogramming.pub/es2022-features-javascript-a9f8f5dcba5a新的ES13规范终于发布了。 JavaScript不是一种开源语言,它是一种需要遵循ECMAScript......
  • 数据库安全管理规范
    1.目的为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本规范。2.适用范围本规范中所定义的数据管理内容,特指存放在......
  • 在Azure DevOps中使用Checkstyle自动检查编码规范
    1.概述什么是checkstyle?checkstyle(https://checkstyle.org/)是一个督促开发人员遵守统一编码标准的工具,它是基于java编写的工具,使用自动化的方式,将开发人员从检查代码规......
  • 4.RestFul和控制器
    4.RestFul和控制器1.控制器Controller控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现控制器负责解析用户的请求并将其转换为一个模型在Spr......
  • 代码规范和编码原则
    (一)代码规范1.代码风格规范,主要是文字上的规定;2.代码设计规范,牵涉到程序设计、模块之间的关系、设计模式等方方面面的通用原则。(二)代码风格规范代码风格的原则是:简明......
  • RESTful理解
    转自:https://www.zhihu.com/question/28557115,https://www.ruanyifeng.com/blog/2011/09/restful.html1.总结看Url就知道要什么看httpmethod就知道干什么(客户端通过四......