毎年この時期は3年生の情報セミナー2の時間を利用して好きなものを作るようにしています。本年度は懸案だったopenBDの検索用API(openBD Search API)の実装を行ってみました。処理の流れを図示したものが下記になります。
⓪~⑥までの処理内容を書き出してみます。
⓪ openBD.jpから全書誌情報をダウンロードします。こちらのPythonスクリプトを土台として,MySQLに書誌情報を突っ込むように改良しました(Thanks Aくん)。
① ユーザからの検索要求を受け付けるWebフォームは,API gatewayにPOST(GETでもいいはず)できる仕様であれば言語は問いません。サンプルとして,JavaScriptからXMLHttpRequest関数を使って実装してみました。
② API gatewayに検索情報をPOSTします。この際,Webフォームを設置してあるサーバのドメイン向けに発行したAPIキーも一緒に送付する必要があります。
③ API gatewayでは,受診したAPIキーをRefererと合わせて認証し,通った場合のみ検索を実行します。
④ MySQLサーバで検索され,マッチしたデータはAPI gatewayに送られます。
⑤ 検索データをJSON形式に加工してWebサーバに送付します。
⑥ JSONデータをどのように表示するかはWebサーバ側で決めます。
検索結果をJSON形式にした理由は,元々のopenBDの書誌情報がJSONで記述されているからです。今のところ混ぜて使う予定はありませんが,「検索機能付きopenbd.jpもどき」のようなものを作る際には楽になるかと。
ちょっとトラブったのは,XMLHttpRequest関数が,デフォルトでは別ドメインへのアクセスを許容していないという仕様の問題。API gateway側で”Access-Control-Allow-Origin: アクセス許可ドメイン”をHTTPヘッダに追記すればよいとのことなので,JSON検索結果を返す直前に発行するようにしました。これで別ドメインからのアクセスがAJAXで可能になりました(その分,セキュリティホールを増やしているとも言える)。
その他,APIキー発行システムを作ったり,大本のPHPスクリプトがバレないようにApacheのエイリアスを設定したりして,何とか今風のWeb APIっぽく実装出来たハズです。外部公開も可能な状態ではありますが,サーバの付加やopenBDの今後を見ながら考えていくことにしたいところです。つか,これ単独だと大して面白くないんで,SNS APIを通じて世評と組み合わせられるような仕組みに使えればいいかなぁと夢想中。