公司项目急需一个简单的API,没有人做,正好前阵子看了遍Falcon的教程,所以就参考着做了下,做完的感觉是太简单了,简直简单得让人不敢相信。因为之前没有任何服务端开发经验,连基本的SQL语句都不太熟悉,但这次用falcon,python-mysqldb和gunicorn配合使用,居然很快就搭建起服务器,而且REST API也跑通了。虽然是个相当简单的API,而且肯定会有大量没意识到的问题存在,但还是把这一过程记录下来,总结一下。

  1. 首先是各种安装(我的电脑上之前就装了MySQL,Ubuntu系统自带Python)

    • $ sudo apt-get install python-pip(安装python的包管理器)
    • $ pip install --upgrade [cython] falcon(如果加上cython好像比较快,没有比较过)

    • $ pip install gunicorn(这个是后面运行服务器的,关于这个目前就知道这么多)

    • $ sudo apt-get install python-mysqldb(这个用来使用Python操作MySQL数据库)

  2. 安装完就可以开始干活了

    • 使用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 default character set utf8 default collate utf8_general_ci') # 加上后面的两句default就可以解决中文乱码问题啦
            conn.select_db('test')
            cur.execute('create table test(id int, title varchar(20))')
            conn.commit()
            cur.close()
            conn.close()
        except MySQLdb.Error, e:
            print "Error >>> " + str(e)

以上,几乎就是这次做这个简单的API所用到的所有技术了。