Python入門實戰--用Falcon框架開發REST API

Zain Zhu發表於2015-06-27

公司專案急需一個簡單的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所用到的所有技術了。

相關文章