WEB APIサーバーをお手軽に構築する
仕事で協力会社の方に、WEB APIサーバーのサンプルをお渡ししなければならなかったので RubyとPythonでサンプルを作ってみました。
サンプルアプリ
サンプルアプリは、 以下のようなJSONのリクエストを受ける想定です。
このuseridをキーとして、ユーザー情報をJSON形式で返すAPIを想定してます。 サンプルなので、リクエストボディからリクストのJSONを取り出す部分も 作っていますが、レスポンスはほぼリテラルを返しているだけのサンプルです。
レスポンスボデイの形式は、以下のような形式です。
Python + Flaskの例
以下は Pythonでflaskを利用したものです。
ルートにリクエストが来ると、postでもgetでもWebページを返すようにしています。 詳細はコードみて下さい。
from flask import * app = Flask(__name__) # これがないと日本語が文字化けする。 app.config['JSON_AS_ASCII'] = False @app.route("/api", methods=["POST"]) def api_return(): try: print(request) userid = request.json['userid'] print("Userid = {}".format(userid)) user = { "id" : userid, "name" : "山田太郎", "gender" : "male", "age" : 29, "company" : "White Company"} return jsonify({"user":user}) except: return """ エラーが発生しました。 """ @app.route("/", methods=["GET","POST"]) def hello_world(): if request.method == "GET": return """ <!DOCTYPE html> <html> <head> <title>Hello World!</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <section> <p> Hello World! とかやってんじゃねーよ </p> <form action="/" method="POST"> <label for="userid">User ID:</label> <input name="userid" name="userid" required minlength="10" size=10></input> </form> </section> </body> </html> """ else: try: userid = str(request.form["userid"]) user = { "id" : userid, "name" : "山田太郎", "gender" : "male", "age" : 29, "company" : "White Company"} return jsonify({"user":user}) except: return """ エラーが発生しました。 """
Ruby + Sinatraの例
Pythonとほぼ同じ実装ですが、ルートのレスポンスについては実装していません。
require 'sinatra/base' require 'json' class MyApp < Sinatra::Base get '/' do '<p> hello!</p>' end post '/api' do params = JSON.parse request.body.read userid = params["userid"] user_json = "{\"user\":{\"age\":29,\"company\":\"White Company\",\"gender\":\"male\",\"id\":\"#{userid}\",\"name\":\"山田太郎\"}}" user_hash = JSON.parse(user_json) JSON.generate(user_hash) end run! end
必要な方は、 https://github.com/yostos/sampleWebAPI.git からどうぞ。