公司项目急需一个简单的API,没有人做,正好前阵子看了遍Falcon的教程,所以就参考着做了下,做完的感觉是太简单了,简直简单得让人不敢相信。因为之前没有任何服务端开发经验,连基本的SQL语句都不太熟悉,但这次用falcon,python-mysqldb和gunicorn配合使用,居然很快就搭建起服务器,而且REST API也跑通了。虽然是个相当简单的API,而且肯定会有大量没意识到的问题存在,但还是把这一过程记录下来,总结一下。
首先是各种安装(我的电脑上之前就装了MySQL,Ubuntu系统自带Python)
$ pip install --upgrade [cython] falcon(如果加上cython好像比较快,没有比较过)
$ pip install gunicorn(这个是后面运行服务器的,关于这个目前就知道这么多)
$ sudo apt-get install python-mysqldb(这个用来使用Python操作MySQL数据库)
安装完就可以开始干活了
使用falcon开发API
使用gunicorn运行服务器
使用mysqldb操作数据库
falcon使用起来感觉非常简单,当然也有可能是因为没有深入去了解的原因。只要导入falcon模块,剩下的几乎就是纯逻辑代码的编写了。因为之前尝试过PHP+Apache,光各种配置文件简直就是噩梦般的存在,使用falcon的时候甚至感觉不到是在做服务器API开发,展示一段代码吧,自己敲的,可以运行:
import falcon class Test(object): def on_get(self, req, resp): resp.body = '{"message": "Hello world!"}' resp.status = falcon.HTTP_200
就是这么简单!你已经实现了一个可以响应get请求的类了,同样的post请求只要写成on_post就行了,是不是简单到不敢相信?先将上面的代码保存为test.py,接下来,继续编写代码,然后试着运行,就能让你的服务器真正的跑起来了。再写个app.py,内容如下:
import falcon import test api = application = falcon.API() test = test.Test() # 添加路由控制 api.add_route('/test', test)
还是那么简单,现在这两个.py文件在同一个目录下,打开终端到当前目录下运行以下命令:
$ gunicorn [-b 127.0.0.1:8000] app
现在你可以去浏览器打开127.0.0.1:8000/test了,会出现{"message": "Hello world"},你的服务器已经跑起来了,是不是感觉很棒!这差不多就是用falcon开发API所要做的所有事情了(至少我目前为止只用到了这些, -b参数可以绑定ip和端口号,默认就是127.0.0.1:8000)。
接下来的这段代码是使用mysqldb连操作数据库的,依旧很简单:
import MySQLdb class DBTest(object): def test(self): try: conn = MySQLdb.connect(host='host',user='user',passwd='psw',port=3306) cur = conn.cursor() cur.execute('create database if not exists test') conn.select_db('test') cur.execute('create table test(id int, title varchar(20))') except MySQLdb.Error, e: print "Error >>> " + str(e)
以上,几乎就是这次做这个简单的API所用到的所有技术了。