一、接口创建
接口名称: /interfaces/
请求方式: POST
参数格式: JSON
请求参数:
参数 | 变量名 | 类型 | 说明 | 是否必传 |
接口名称 | name | 字符串 | 项目接口名称 | 是 |
接口地址 | url | 字符串 | 接口地址 | 是 |
请求方法 | method | 字符串 | 请求方法 | 是 |
接口类型 | type | 字符串 | 接口类型 | 是 |
所属项目 | project | 整数 | 所属项目id | 是 |
请求示例:
json格式参数
{
"name": "登录",
"url": "/users/login/",
"method": "post",
"type": "1",
"project": 1
}
返回示例
响应状态码:201 响应数据:
{
"id": 1,
"steps": [],
"name": "登录",
"url": "/users/login/",
"method": "post",
"type": "1",
"project": 1
}
二、 删除接口
接口名称:/interfaces/接口ID/
请求方式: DELETE
参数格式: 路径参数
请求参数: 无
返回示例
响应状态码:204 响应数据:无
三、修改接口
接口名称:/interfaces/接口ID/
请求方式: PUT/PATCH
参数格式: JSON
请求参数:
参数 | 变量名 | 类型 | 说明 | 是否必传 |
接口名称 | name | 字符串 | 项目接口名称 | put请求必传 |
接口地址 | url | 字符串 | 接口地址 | put请求必传 |
请求方法 | method | 字符串 | 请求方法 | put请求必传 |
接口类型 | type | 字符串 | 接口类型 | put请求必传 |
所属项目 | project | 整数 | 所属项目id | put请求必传 |
请求示例:
json格式参数
{
"name": "登录",
"url": "/users/login/",
"method": "post",
"type": "1",
"project": 1
}
返回示例
响应状态码:200 响应数据:
{
"id": 1,
"steps": [],
"name": "登录",
"url": "/users/login/",
"method": "post",
"type": "1",
"project": 1
}
四、查看接口列表
接口名称:/interfaces/
请求方式: GET
参数格式: URL参数
请求参数:
参数 | 变量名 | 类型 | 说明 | 是否必传 |
项目id | project | 整数 | 所属项目id | 否 |
类型 | type | 字符串 | 接口类型 | 否 |
返回示例
响应状态码:200 响应数据:
[{
"id": 1,
"steps": [],
"name": "登录",
"url": "/users/login/", "method": "post",
"type": "1",
"project": 1
}]
五、查看接口
接口名称:/interfaces/接口ID/
请求方式: GET
参数格式: 路径参数
请求参数: 无
返回示例
响应状态码:200 响应数据:
{
"id": 1,
"steps": [],
"name": "登录",
"url": "/users/login/",
"method": "post",
"type": "1",
"project": 1
}
六、后端代码
1. 序列化器
在projects/serializers.py 模块中添加如下序列化器:
在接口详情中,需要嵌套测试步骤,所以先定义了一个测试步骤的序列化器
class NestTestStepSerializer(serializers.ModelSerializer):
"""嵌套测试步骤序列化器"""
class Meta:
model = TestStep
fields = ['id', 'title']
class InterfaceSerializer(serializers.ModelSerializer):
"""接口序列化器"""
steps = NestTestStepSerializer(source='teststep_set', many=True, read_only=True)
class Meta:
model = Interface
fields = '__all__'
2. 视图(手动实现过滤功能)
class InterfaceViewSet(ModelViewSet):
serializer_class = InterfaceSerializer
queryset = Interface.objects.all()
permission_classes = [IsAuthenticated, IsLeaderOrReadOnly]
# filterset_fields = ['project', 'type']
filterset_class = InterFaceFilter
# 手动实现过滤功能
# 复写get_queryset
# def get_queryset(self):
# queryset = super().get_queryset()
# # 获取参数
# project = self.request.query_params.get('project')
# type_ = self.request.query_params.get('type')
# # 过滤
# if project:
# queryset = queryset.filter(project=project)
# if type_:
# queryset = queryset.filter(type=type_)
# return queryset
3.路由
from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()
router.register('interfaces', views.InterfaceViewSet)
urlpatterns = router.urls
七、期间遇到的一些问题
1. 在写接口序列化器的时候,我想要拿到每个接口的用例信息,也就是steps参数
目前是这样子:
改造: (嵌套序列化器)