三分钟学会API接口设计 之 Compass 的Restful API 快速入门指南 -- 使用Flask框架

声明:

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

作者:曾国仕

团队:华为杭州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这个源码目录中,也可以找到。

时间: 2024-10-14 13:15:53

三分钟学会API接口设计 之 Compass 的Restful API 快速入门指南 -- 使用Flask框架的相关文章

php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能

2016年12月29日13:45:27 关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充 说道接口设计第一反应就是restful api 请明白一点,这个只是设计指导思想,也就是设计风格 ,比如你需要遵循这些原则 原则条件REST 指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是 RESTful.Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的.从客户端到服务

[转]三分钟学会.NET Core Jwt 策略授权认证

[转]三分钟学会.NET Core Jwt 策略授权认证 一.前言# 大家好我又回来了,前几天讲过一个关于Jwt的身份验证最简单的案例,但是功能还是不够强大,不适用于真正的项目,是的,在真正面对复杂而又苛刻的客户中,我们会不知所措,就现在需要将认证授权这一块也变的复杂而又实用起来,那在专业术语中就叫做自定义策略的API认证,本次案例运行在.NET Core 3.0中,最后我们将在swagger中进行浏览,来尝试项目是否正常,对于.NET Core 2.x 版本,这篇文章有些代码不适用,但我会在文

优秀的API接口设计原则及方法(转)

一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的打击就更大.如果API经常发生变化,用户就会失去对提供方失去信心,从而也会影响目前的业务. 但是我们为什么还要修改API呢?为了API看起来更加漂亮?为了提供更多功能?为了提供更好的性能?还是仅仅觉得到了改变了时候了?对于用户来说,他们更愿意使用一个稳定但是看起来不那么时髦的API,这并不意味着我们

三分钟学会.NET微服务之Polly

原文:三分钟学会.NET微服务之Polly 熔断降级是一个非常重要的概念,我们先说一下什么是熔断降级,咱们都知道服务发现,一个有问题的服务器没来得急注销过一会就崩溃掉了,那么我们的请求就有可能访问一个已经崩溃的服务器,那么就会请求失败,因为已经game over了.那么这个问题怎么解决呢,你一定要承认,这个问题是无法避免的.没有什么方法说,我拿到的服务器都没有问题,这事是不可能的,所以你要承认你会有机会拿到有问题的服务器.那么熔断降级就是来解决这种问题的. 一.什么是熔断 熔断就像是“保险丝”,

三分钟学会Redis在.NET Core中做缓存中间件

原文:三分钟学会Redis在.NET Core中做缓存中间件 大家好,今天给大家说明如何在.NET Core中使用Redis,我们在想要辩论程序的好与坏,都想需要一个可视化工具,我经常使用的是一位国内大牛开发的免费工具,其Github地址为: https://github.com/qishibo/AnotherRedisDesktopManager/releases ,它真的很给力,Redis的安装在 https://github.com/MicrosoftArchive/redis/relea

三分钟学会 JavaScript 单元测试

此篇文章使用 js-test-driver , 希望给无任何JavaScript 单元测试经验的开发者, 能在最短的时间内, 开展单元测试的工作? 附件: 三分钟学会 JavaScript 单元测试

三分钟学会不吃球

[转] [转]三分钟学会不吃球 2014.6.6 一.发下旋短球1. 要点 1)抛球不宜太高,眼睛一定要盯着球:2)手腕的力量大于前臂的力量:3)摩擦球底部,向前的力只要球能过网就行,几乎所有的力用来旋转.4)发球的第一落点在球台中区.二跳下不出台 . 2.特点:使对方不易发力抢拉.冲或抢攻.3.战术:最好是对方吃了直接得分,其次能为下一板创造机会,最次不能使对方直接进攻.二.接下旋球:1.判断:接发球关键是判断,如上图柳哥,球拍触球一瞬间摩擦球下部,由此可判断为下旋球,根据挥拍力量大小判断旋转

atitit.基于http json api 接口设计 最佳实践 总结o7

atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::serverand android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通參数 meth,param, 2 2.2. 全部的參数定义 2 2.3. key,dynami key)韩式 static key? 2 2.4. 防篡改 sign 2 2.5. Encry加密 3 2.6. zip压缩:: 3 2.7. 首先压缩韩式加密??? 3 3. 选型大全:rim ,ws, http 

Web API接口设计(学习)

1.在接口定义中确定MVC的GET或者POST方式 由于我们整个Web API平台是基于MVC的基础上进行的API开发,因此整个Web API的接口,在定义的时候,一般需要显示来声明接口是[HttpGet]或者[HttpPost],虽然有些接口也可以不用声明,但是避免出现类似下面的错误信息,显式声明还是有好处的. 请求的资源不支持 http 方法“POST 例如在基类定义的查找对象接口如下所示. /// <summary> /// 查询数据库,检查是否存在指定ID的对象 /// </su