ApiPluginsFramework — это фреймворк для разработки плагинов к Web API, который использует Flask в качестве обработчика HTTP-протокола и flasgger для тестирования HTTP.
Фреймворк позволяет разработчикам сосредоточиться на бизнес-логике, которая реализуется в плагинах.
В модулях плагинов информация об API задаётся с помощью декоратора @plugin_base.ModuleFunc.
Приглашаем всех присоединиться к разработке и улучшению функциональности ApiPluginsFramework, чтобы сделать его более удобным и мощным, а также расширить возможности плагинов под ним.
. ├── README.MD ├── docs (документы) │ ├── src (исходный код) ├── core (ядро) └── libs (библиотеки) └── plugins (плагины) └── utils (общие) └── main.py (запуск основной программы)
.ApiPluginsFramework │---Plugins │ │---Plugin1 (каталог плагина) │ ├── init.py (файл определения плагина) │ └── plugin_moduleX.py (файл модуля плагина) │ │---Plugin2 (каталог плагина) │ ├── init.py (файл определения плагина) │ └── plugin_moduleX.py (файл модуля плагина)
Python 2.7.*
flask flasgger logging
python main.py
Оформление файла определения плагина init.py:
#: определение класса плагина
class Plugin1(plugin_base.PluginBase):
#: метод инициализации плагина
def __init__(self, pluginName,pluginPath):
super(Plugin1, self).__init__(pluginName,pluginPath)
#: реализация интерфейса информации о плагине
def GetAbout(self):
return {
"plugin_version": "1.0.0.1",
"plugin_author": "CornWu",
"plugin_description": "Тестовый плагин",
"plugin_copyright": "海南新境界软件有限公司",
"plugin_pubdate": "2018-08-20",
}
#: создание экземпляра плагина
def createPluginInstance(pluginName,pluginPath):
return Plugin1(pluginName,pluginPath)
Оформление файла модуля плагина plugin_module1.py:
Здесь сосредоточена бизнес-логика.
# -*- coding: utf-8 -*-
from libs import plugin_base
@plugin_base.ModuleFunc("/test.do",
ApiOperation = {
"Name": "Функционал тестирования 1",
"Description": "Описание функционала тестирования 1",
"NeedAuth": False
},
ApiParameter = {
"Description": "Информация о пользователе",
"Properties": {
"UserID": { "DataType": "string", "Description": "Идентификатор пользователя", "Required": True },
"UserName": { "DataType": "string", "Description": "Имя пользователя", "Required": True },
"UserStatus": { "DataType": "string", "Description": "Статус пользователя", "Enum": ["Stop","Start"], "Required": True },
"UserDept": {
"DataType": "object", "Description": "Организационная структура", "Required": True,
"Properties": {
"DeptID": { "DataType": "string", "Description": "ID отдела", "Required": True },
"DeptName": { "DataType": "string", "Description": "Название отдела", "Required": True }
}
},
"UserCorps": {
"DataType": "array", "Description": "Компании пользователя", "Required": True,
"Items": {
"DataType": "string"
}
},
"UserRoles": {
"DataType": "array", "Description": "Роли пользователя", "Required": True,
"Items": {
"DataType": "object",
"Properties": {
"RoleID": {"DataType": "string", "Description": "ID роли", "Required": True},
"RoleName": {"DataType": "string", "Description": "Название роли", "Required": True}
}
}
}
}
},
ApiResponse = {
"Description": "Информация об отделе",
"DataType": "string",
"Properties": { ```
DeptID: {DataType: "string", Description: "部门ID", Required: True},
DeptName: {DataType: "string", Description: "部门名称", Required: True}
)
def PluginModuleFunc1(inParameter):
isExist = inParameter.HasAttr("UserName")
return inParameter.UserName
Flasgger界面
JS页面
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )