前言
用 Python 构建 API 是一项非常简单的任务。本教程将帮助您使用 Flask 框架在 Python 中编写基本的 REST API
REST API 几乎无处不在。它们是向客户端展示数据的标准方法,了解如何开发 REST API 对于所有开发人员都是必要的
有很多理由需要学习使用 Python 开发 REST api。如果您是 API 开发的新手,那么学习如何开发 REST API 将帮助您在工作中大展身手。
什么是 REST API ?
REST(Representational State Transfer)直译叫表现层状态转移, 是一种架构风格,是一种通常用于 Web 服务开发的通信方法。 REST 的通常比更重量级的SOAP(简单对象访问协议)更受欢迎,因为 REST 不会占用太多带宽,这使其更适合在网络通信较多的场景上使用。 SOAP 方法需要编写或使用提供的服务器程序(用于提供数据)和客户端程序(用于请求数据)
下图会帮助你的理解

构建 REST API 需要的工具
- Python
- Flask
- Flask-SQLAlchemy
- SQlite3
- Jsonify
开始编码
从 Employees and Tracks Details中下载数据集,并放在名为“python rest”的项目文件夹中,把数据库名称为“chinook.db”
下载完成后,在python_rest 目录下创建server.py文件,我们之后会在这文件上编写 API 定义和 Flask 的代码。
接下来,我们用 python2.7 创建虚拟环境,并安装相关依赖库:
$ virtualenv venv
$ source venv/bin/activate
$ pip install flask flask-jsonpify flask-sqlalchemy flask-restful
$ pip freeze

REST 有 4 个方法
- GET
- PUT
- POST
- DELETE
在开始写代码前,先保证你能够正常连接到数据库:

现在一切都设置好了,我们开始公开员工数据的代码,并跟踪来自数据库的数据,还添加了一个关于员工的查询操作符,其中员工的详细信息由EmployeeID搜索和获取
一起准备就绪后,我们就可以开始编写获取员工数据的代码,
from flask import Flask, request
from flask_restful import Resource, Api
from sqlalchemy import create_engine
from json import dumps
from flask.ext.jsonpify import jsonify
db_connect = create_engine('sqlite:///chinook.db')
app = Flask(__name__)
api = Api(app)
class Employees(Resource):
def get(self):
conn = db_connect.connect() # 连接数据库
query = conn.execute("select * from employees") # 从数据库中查找数据
return {'employees': [i[0] for i in query.cursor.fetchall()]} # 拿到数据,并返回
class Tracks(Resource):
def get(self):
conn = db_connect.connect()
query = conn.execute("select trackid, name, composer, unitprice from tracks;")
result = {'data': [dict(zip(tuple (query.keys()) ,i)) for i in query.cursor]}
return jsonify(result)
class Employees_Name(Resource):
def get(self, employee_id):
conn = db_connect.connect()
query = conn.execute("select * from employees where EmployeeId =%d " %int(employee_id))
result = {'data': [dict(zip(tuple (query.keys()) ,i)) for i in query.cursor]}
return jsonify(result)
api.add_resource(Employees, '/employees') # Route_1
api.add_resource(Tracks, '/tracks') # Route_2
api.add_resource(Employees_Name, '/employees/<employee_id>') # Route_3
if __name__ == '__main__':
app.run(port='5002')
上面的代码创建了 3 个路由:
- http://127.0.0.1:5002/employees 返回数据库中 employees 中所有用户的 id

- http://127.0.0.1:5002/tracks 查看所有 tracks 表的详细信息

- http://127.0.0.1:5002/employees/8 返回 employees id 为 8 的用户

本文创建API很简单。您还可以对数据进行 PUT、POST 和 DELETE 等操作进行实现。
via: www.codementor.io/sagaragarwa…
作者:[Agarwal](Project Link: github.com/sagaragarwa…) 译者:Alex1996a