Symfoware

Symfowareについての考察blog

elixir + cowboyでwebアプリ その4 住所検索APIサンプル

色々材料が揃ってきました。

elixir + cowboyでwebアプリ その3 json API
elixir CSVファイルを1行づつ読み込み、内容をMariaDBに登録する

多少実用的なサンプルとして、郵便番号を受け取るとデータベースを検索し、
結果をjsonで返却するサンプルを書いてみます。


ソースコード



プログラムは、ここで作ったものを修正します。

elixir + cowboyでwebアプリ その3 json API


修正対象は、lib/cowjsonHandler.exです。

・cowjsonHandler.ex


  1. defmodule Cowjson.Handler do
  2. def init(_type, req, []) do
  3.     {:ok, req, :no_state}
  4. end
  5. def handle(request, state) do
  6.     
  7.     # requestからPOSTデータを取得
  8.     {:ok, postvals, req2} = :cowboy_req.body_qs(request)
  9.     
  10.     # 値を取得
  11.     zip = :proplists.get_value("zip", postvals)
  12.     {:ok, address} = get_address(zip)
  13.     
  14.     
  15.     # クライアントに返す値
  16.     api_result = %{"zip" => zip, "address" => address}
  17.     
  18.     # JSXでデコード
  19.     {:ok, api_result_json} = JSX.encode(api_result)
  20.     
  21.     # 内容を返却
  22.     { :ok, reply } = :cowboy_req.reply(
  23.      200,
  24.      [ {"content-type", "application/json"} ],
  25.      api_result_json,
  26.      request
  27.     )
  28.     {:ok, reply, state}
  29. end
  30. defp get_address(zip) do
  31.     # データベースに接続
  32.     {:ok, p} = Mariaex.Connection.start_link(username: "admin", database: "sample")
  33.     # データの検索
  34.     {:ok, result} = Mariaex.Connection.query(p, "SELECT address FROM post where zip_code = ?", [zip])
  35.     
  36.     address = ""
  37.     
  38.     row = List.first(result.rows)
  39.     if row != nil do
  40.         [address] = row    
  41.     end
  42.     
  43.     # データベース切断
  44.     Mariaex.Connection.stop(p)
  45.     
  46.     {:ok, address}
  47.     
  48.     
  49. end
  50. def terminate(reason, request, state) do
  51.     :ok
  52. end
  53. end





テスト用のプログラムはPythonで作成しました。

・sample.py


  1. # -*- coding:utf-8 -*-
  2. import urllib
  3. import urllib2
  4. import json
  5. def main():
  6.     url = 'http://192.168.1.102:8080/api'
  7.     data = {
  8.         u'zip' : u'9010154',
  9.     }
  10.     postval = urllib.urlencode(data)
  11.     
  12.     request = urllib2.Request(url, data=postval)
  13.     response = urllib2.urlopen(request)
  14.     ret = response.read()
  15.     
  16.     retjson = json.loads(ret)
  17.     print retjson['zip']
  18.     print retjson['address']
  19. if __name__ == '__main__':
  20.     main()





実行してみると、ちゃんと住所の応答があります。


$ python sample.py
9010154
沖縄県那覇市赤嶺





課題は、毎回データベースに接続している点でしょうか。
とりあえず、動くサンプルということで。


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/07/28(火) 22:51:59|
  2. Erlang
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<elixir + cowboyでwebアプリ その5 デプロイ | ホーム | elixir + cowboyでwebアプリ その3 json API>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1773-f0d11bc3
この記事にトラックバックする(FC2ブログユーザー)