pythonで汎用restful api serviceを書く(一)
ずっとnodeを使っています.jsはバックエンドをして、徐々に大きなデータの範囲を渉猟して、pythonを迂回することができないことを運命付けて、そのためいくつかの成熟したものをpythonで書き換えることを決定して、1つは構想を開拓して、比較を通じてpythonを深く学ぶことです;二つ目は目標があって、動力があって、根気よく堅持することを望んでいます.
プロジェクト紹介
python言語でrestful api serviceを書き、データベースはmysqlを使用します.バックエンドマイクロサービスのみを行い、ORMの実装方式はSQLを自動的に生成する方式で完了するため、軽量級のflaskをwebフレームワークとして選択した.このような選択は、主な目的は中小規模のネットワーク応用に対して、関係データベースの様々な優位性を十分に利用し、豊富な現代のインターネット応用を実現することである.
restful api
restful apiの概念は紹介しません.ここでは、プロトコル形式を実装します.
説明: rsはリソース識別である. 第2節、userは、データベーステーブル名として解析されます. クエリーの場合、idが空または0の場合、idは無視されます.すなわち、リストクエリーです. の新規作成と変更により、formフォームの受信に加えてurlのidパラメータもパラメータセットにマージされます. 同じクエリを削除します.
flaskに正規表現をサポートさせる
flaskのデフォルトのルーティングは正規表現をサポートしていませんが、完全なURLを切り取って自分で解析する必要があります.クエリーを経て、以下の手順で簡単にタスクを完了することができます.使用werkzeugライブラリ:from werkzeug.routing import BaseConverter 定義変換器: 登録変換器:app.url_map.converters['regex'] = RegexConverter url:@appを正則で切り取る.route('/rs/', methods=['PUT', 'DELETE', 'POST', 'GET'])
質問:正則(.*)理論的には任意の除車のすべての文字に一致するはずですが、なぜか、ここでは疑問符(?)が認識されません. 私はrequestを使います.Dataはフォームデータを取得します.なぜrequestですか.form取れないの? '/rs/"):query_url>'の後にスラッシュ('/rs/"):query_url>/'),request.dataではデータが取れません.なぜですか.
解析jsonデータ
jsonデータの解析は簡単ですが、クライアントから送られてきたデータを検証する必要があります.次は異常処理で一度だけ解析するソリューションです.
URL解析
既定プロトコルに従ってURLを解析し、テーブル名を抽出し、sql組合せパラメータセットを生成します.
pycharmプロジェクト構成
Run/Debug Configurationsを構成しておくと、IDEで実行して単一ステップでデバッグすることができ、flaskフレームワークの動作原理を熟知することができます. Script path :/usr/local/bin/flask Parameters : run 環境変数 FLASK_APP = index.py LC_ALL = en_US.utf-8 LANG = en_US.utf-8
上の3つを配置すれば動作すると思っていたが、端末シミュレータで正常に動作しているからだ.その結果、IDEには不思議なエラーが山積し、よく見ると、符号化構成の問題かもしれません.検索すると、pythonバージョン2と3の違いのため、次の2つの環境変数を構成する必要があります.
完全なコード
小結
今日flaskを利用してwebインフラストラクチャを完成して、URLを正しく解析することができて、クライアントが提出したデータを抽出して、要求の異なる方式によって私達の必要なデータを組み合わせます.
プロジェクト紹介
python言語でrestful api serviceを書き、データベースはmysqlを使用します.バックエンドマイクロサービスのみを行い、ORMの実装方式はSQLを自動的に生成する方式で完了するため、軽量級のflaskをwebフレームワークとして選択した.このような選択は、主な目的は中小規模のネットワーク応用に対して、関係データベースの様々な優位性を十分に利用し、豊富な現代のインターネット応用を実現することである.
restful api
restful apiの概念は紹介しません.ここでは、プロトコル形式を実装します.
[GET]/rs/user/{id}/key1/value1/key2/value2/.../keyn/valuen
[POST]/rs/user[/{id}]
[PUT]/rs/user/{id}
[DELETE]/rs/user/{id}/key1/value1/key2/value2/.../keyn/valuen
説明:
flaskに正規表現をサポートさせる
flaskのデフォルトのルーティングは正規表現をサポートしていませんが、完全なURLを切り取って自分で解析する必要があります.クエリーを経て、以下の手順で簡単にタスクを完了することができます.
class RegexConverter(BaseConverter):
def __init__(self, map, *args):
self.map = map
self.regex = args[0]
質問:
解析jsonデータ
jsonデータの解析は簡単ですが、クライアントから送られてきたデータを検証する必要があります.次は異常処理で一度だけ解析するソリューションです.
def check_json_format(raw_msg):
try:
js = json.loads(raw_msg, encoding='utf-8')
except ValueError:
return False, {}
return True, js
URL解析
既定プロトコルに従ってURLを解析し、テーブル名を抽出し、sql組合せパラメータセットを生成します.
@app.route('/rs/', methods=['PUT', 'DELETE', 'POST', 'GET'])
def rs(query_url):
(flag, params) = check_json_format(request.data)
urls = query_url.split('/')
url_len = len(urls)
if url_len < 1 or url_len > 2 and url_len % 2 == 1:
return "The params is wrong."
ps = {}
for i, al in enumerate(urls):
if i == 0:
table = al
elif i == 1:
idd = al
elif i > 1 and i % 2 == 0:
tmp = al
else:
ps[tmp] = al
ps['table'] = table
if url_len > 1:
ps['id'] = idd
if request.method == 'POST' or request.method == 'PUT':
params = dict(params, **{'table': ps.get('table'), 'id': ps.get('id')})
if request.method == 'GET' or request.method == 'DELETE':
params = ps
return jsonify(params)
pycharmプロジェクト構成
Run/Debug Configurationsを構成しておくと、IDEで実行して単一ステップでデバッグすることができ、flaskフレームワークの動作原理を熟知することができます.
上の3つを配置すれば動作すると思っていたが、端末シミュレータで正常に動作しているからだ.その結果、IDEには不思議なエラーが山積し、よく見ると、符号化構成の問題かもしれません.検索すると、pythonバージョン2と3の違いのため、次の2つの環境変数を構成する必要があります.
完全なコード
git clone https://github.com/zhoutk/pyrest.git
cd pyrest
export FLASK_APP=index.py
flask run
小結
今日flaskを利用してwebインフラストラクチャを完成して、URLを正しく解析することができて、クライアントが提出したデータを抽出して、要求の異なる方式によって私達の必要なデータを組み合わせます.