三分钟学会API接口设计 之 Compass 的Restful API 快速入门指南,compassrestful


声明:

本博客欢迎转载,但请保留原作者信息!

作者:曾国仕

团队:华为杭州OpenStack团队


引子

大部分开源框架基本上都是使用Curl + RPC的方式构筑系统,以提供对外\对内的交互能力。

这种设计,本人认为更多地是出于层次化与模块化设计的考量,简化整个架构,使得开发轻量简单化。

本文主要介绍Compass的REST API的设计与实现。

通过本文档,读者至少能快速搭建一个属于自己的REST API 框架,并且能够基于该框架进行功能扩展以建立一个完整的系统。

Compass的结构简介


图片来源:https://wiki.openstack.org/wiki/Compass#What_is_Compass.3F

 

上图是Compass的结构图,该图内容较多,但是,本文只关心其中的3部分:【Huawei UI】、【Rest Client】、【Restful API Server】。

场景

l  我的应用有一个酷炫的Web界面

l  我的应用的后端是用python开发的,这语言简单易用

l  我只关心我的业务逻辑如何处理,UI是设计师的事

l  我希望能够轻松地将Python对接Web,这种对接最好是通过Curl命令实现,这会使得我能够方便地规划与扩展对外的统一接口

l  我希望我的应用能够承受住大规模的访问

实现步骤

为满足以上场景的要求,需要借助于一些框架了。但是在此之前,我们需要先规划下一步如何走?

我希望我能够按照如下的步骤来依次实现功能:

 

搭建Restful Api Server

Compass使用Flask。

Flask是一个Python的开源Web框架,使得利用Python进行web开发变得尤其的简单。

(1)安装Flask

首先,需要安装pip工具

           Install:

                  yuminstall wget -y

                  wgethttps://bootstrap.pypa.io/get-pip.py

然后,安装Flask:

           pipinstall Flask

 

(2)建立一个简单的WSGI Server

使用Flask内建的WSGI Server起服务:

hello.py:

from flask import Flask

app = Flask(__name__)

 

@app.route("/")

def hello():

    return"Hello World!"

 

@app.route("/test")

def test():

    return"This is a test."

 

if __name__ == "__main__":

    app.run()  ##绑定到默认的本地Localhost地址上

 

Setup:

$ python hello.py

 * Running on http://localhost:5000/

 

利用内嵌的WSGIServer绑定到特定的IP地址上:

 

if __name__ == "__main__":

                      app.run(host='10.0.0.1')

 

(3)测试

                  $curl -i http://127.0.0.1:5000/

                  $curl -i http://127.0.0.1:5000/test/

                  $curl -i http://10.0.0.1:5000/

 

至此,一个简单的WSGI Server就建立成功了。

但是这个Server只是利用了Flask本身内建的WSGI 服务器进行部署不能满足实际的生产环境中的需求。

规划API 接口规范

到了此处,就可以根据实际的业务逻辑,规划API接口规范了。

实际上是:规划Curl命令中的url地址,设计request格式与response格式并制定对应的处理方法。

对外提供服务

这部分的功能主要依赖于实际的部署方式。

Flask提供了多种实际生产环境下的部署策略:

mod_wsgi(Apache)

StandaloneWSGI Containers

uWSGI

FastCGI

CGI

Compass使用了mod_wsgi的方式将server搭建在Apache上,并且,统一规划了Api文件目录作为Restful Api 的访问目录。

如何认定这是个MVC架构

MVC架构是用来规范开发的,实际开发中并无一个标准规范,每一层也没有十分清晰的划分。

在Compass中,Viewer层的业务主要集中在:

@app.route("/test")

def test():

    return"This is a test."

这类函数中,以接收url request并调用相应的方法处理。

实际的处理过程自然比上面的函数复杂,需要多个模块协同处理,放在Controller层进行实现,可见Compass的Actions这个源码目录。

Model层则定义了业务相关的数据模型,在model这个源码目录中,也可以找到。




相关内容