AutoLine源码分析之如何构建restful API

什么是AutoLine开源平台

AutoLine开源平台是一个开源自动化测试解决方案,基于RobotFramework进行二次开发,支持RobotFramework几乎所有的库。

源码地址

github地址: https://github.com/small99/AutoLine 码 云 地 址:https://gitee.com/lym51/AutoLine

下图为AutoLine所有的restful API的定义及实现

restful API主要实现以下功能:

  1. 产品管理
  2. 项目管理
  3. 对象、套件、用例、变量、步骤管理
  4. 调度及任务管理
  5. 用户管理

等等

如何实现restful API?

在autoline开源平台中我们采用了blueprint来统计管理路由,使用flask-restful插件来实现restful API

具体实现步骤如下:

1. 注册api blueprint,在app下的__init__.py可以看到以下代码片段

from .api import api_bp as api_blueprint
app.register_blueprint(api_blueprint, url_prefix='/api/v1')

2. 在api下的__init__.py可以看到以下代码片段,来实现restful API资源添加

# 导入blueprint及restful
from flask import Blueprint
from flask_restful import Api

# 构建blueprint及restful Api对象
api_bp = Blueprint('api', __name__)
api = Api(api_bp)

# 添加认证restful api资源
from .auth import Auth
api.add_resource(Auth, "/auth/")

# 添加产品管理restful api资源
from .product import Product
api.add_resource(Product, "/product/")

3. 我们看下产品管理的restful api的具体实现代码,在api/product.py中,下面的代码已经去掉了具体的实现,以便大家更清楚的理解代码实现骨架:

# -*- coding: utf-8 -*-

__author__ = "苦叶子"

"""

公众号: 开源优测

Email: lymking@foxmail.com

"""

from datetime import datetime

from flask_restful import Resource, reqparse
from flask_login import current_user

from ..models import AutoProduct, User
from .. import db

# 继承Resource
class Product(Resource):
    def __init__(self):
        # 定义从前端传入服务端要转换参数
        self.parser = reqparse.RequestParser()
        self.parser.add_argument('name', type=str)
        self.parser.add_argument('desc', type=str)
        self.parser.add_argument('tags', type=str)
        self.parser.add_argument('enable', type=bool, default=True)
        self.parser.add_argument('id', type=int, default=-1)
        self.parser.add_argument('method', type=str)
        self.parser.add_argument('page', type=int, default=1)
        self.parser.add_argument('rows', type=int, default=15)
    
    # get方法的实现
    def get(self):
        args = self.parser.parse_args()

        pass

        return data
    
    # post方法的实现
    # 通过参数method的值来实现增删改查动作
    # 目的是避免再去实现put、delete等方法,统一由post方法实现
    def post(self):
        args = self.parser.parse_args()
        method = args["method"].lower()
        if method == "create":
            return self.__create(args), 201
        elif method == "edit":
            return self.__edit(args), 201
        elif method == "delete":
            return self.__delete(args), 201
        elif method == "query":
            return self.__query(args), 201

        return {"status": "fail", "msg": "方法: %s 不支持" % method}, 201
    
    # 实现创建动作,即新增
    def __create(self, args):
        pass
        
    # 实现查询
    def __query(self, args):
        pass

    # 实现编辑
    def __edit(self, args):
        pass
    
    # 实现删除
    def __delete(self, args):
        pass

AutoLine开源平台简明教程

AutoLine开源平台安装部署教程

AutoLine开源平台常见问题解答

AutoLine开源平台源码组织结构

AutoLine源码分析之开始篇

AutoLine源码分析之入口源码

AutoLine源码分析之配置管理

AutoLine源码分析之数据库模型

AutoLine源码分析之Flask初始化模块

AutoLine源码分析之静态页面模板及对应API介绍

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2018-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏皮振伟的专栏

[linux][statethread]协程库ST技术分析

前言: 在IO密集型的场景下,尤其是互联网后台,经常会使用epoll等IO复用技术。鉴于直接使用epoll的代码阅读性和开发效率等原因,就抽象出来了各种高级模型...

37280
来自专栏游戏杂谈

PHP实现一个简单url路由功能

如果一个页面的内容呈现,需要根据url上传递的参数来进行渲染。很多时候可能是这样子写:xxx.com/xx?c=x&m=x&t=..,而我们看到的url往往是...

1.2K10
来自专栏L宝宝聊IT

Nagios监控系统

31230
来自专栏崔庆才的专栏

让面试官颤抖的 HTTP 2.0 协议面试题

Http协议,对于拥有丰富开发经验的程序员来说简直是信手拈来,家常便饭。虽然天天见,但是对于http协议的问题,可能很多人在没有积极准备的情况下,不一定能很好的...

30930
来自专栏喵了个咪的博客空间

zephir-(3)你的第一个PHP拓展

#zephir-你的第一个PHP拓展# ? ##前言## 先在这里感谢各位zephir开源技术提供者 在之前的介绍中大家不仅了解了zephir具体是一个什么样的...

40670
来自专栏用户画像

4.1.6 文件系统基础

文件是以计算机硬盘为载体存储在计算机上的信息集合,它的形式很多样化,可以是文本文档、图片、程序等。

7620
来自专栏大闲人柴毛毛

Linux文件系统——全方位掌握

文件系统的特性 磁盘分区完毕后需要进行格式化,操作系统才能使用这个分区。 不同操作系统能够使用的文件系统是不同的,例如:Windows98以前使用FAT/F...

40890
来自专栏决胜机器学习

Java初涉感悟

Java初涉感悟 (原创内容,转载请注明来源,谢谢) 一、概述 近期要接触到一些PHP转Java项目,用到的java框架是SpringBoot,故学习一些ja...

38640
来自专栏Java后端技术栈

分布式锁简单入门以及三种实现方式介绍

很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多...

12610
来自专栏石奈子的Java之路

原 荐 Java9 Module解惑

24940

扫码关注云+社区

领取腾讯云代金券