目次
はじめに
最近、様々な言語で作られたツールを連携するのに、
JSONファイルを使っているのですが、
今回は、そのJSONファイルを様々なプログラミング言語でやり取りするための
シンプルなJSONサーバ・JSONクライアントのコードを紹介したいと思います。
紹介するコードはすべて下記のリポジトリで公開しています。
順次、対応言語も増やしていく予定です。
Python
Server
基本的にデフォルトモジュールのみを使って実現できます。
""" JSON Server in python author: Atsushi Sakai (@Atsushi_twi) """ from http.server import HTTPServer, SimpleHTTPRequestHandler from urllib.parse import parse_qs, urlparse import json from datetime import datetime import math class MyHandler(SimpleHTTPRequestHandler): def do_GET(self): uri = self.path ret = parse_qs(urlparse(uri).query, keep_blank_values=True) content = {} content["title"] = "Python JSON server" content["time"] = datetime.now().strftime("%Y%m%d%H%M%S") content["PI"] = math.pi ret = json.dumps(content) body = bytes(ret, 'utf-8') self.send_response(200) self.send_header('Content-Type', 'application/json') self.send_header('Content-length', len(body)) self.end_headers() self.wfile.write(body) def main(): host = 'localhost' port = 8000 httpd = HTTPServer((host, port), MyHandler) print('serving at port', port) httpd.serve_forever() print(__file__ + " start!!") if __name__ == '__main__': main()
Client
こちらもデフォルトモジュールのrequestsを使いました。
""" JSON Client in python author: Atsushi Sakai (@Atsushi_twi) """ import requests def main(): headers = {"content-type": "application/json"} url = "http://localhost:8000" response = requests.get(url, headers=headers) json = response.json() print(json) if __name__ == '__main__': main()
Julia
Server
JSONサーバではHttpのServer用に
HttoServerモジュールと、
JSONパーサとして、JSONモジュールを
使用しています。
# # JSON Server in Julia # # author: Atsushi Sakai # using HttpServer using JSON function response_json() println("json requested!!") json = Dict("title"=>"Julia JSON server", "PI" => pi) json["time"] = Dates.format(Dates.now(), "yyyymmddHHMMSS") return JSON.json(json) end function main() println(PROGRAM_FILE," start!!") http = HttpHandler() do req::Request, res::Response Response(response_json()) end server = Server(http) host = IPv4(127,0,0,1) # localhost port = 8000 run(server, host=host, port=port) println("serving at port", port) println(PROGRAM_FILE," Done!!") end if length(PROGRAM_FILE)!=0 && contains(@__FILE__, PROGRAM_FILE) @time main() end
Client
クライアントでは、Requestsモジュールを
利用しています。
# # JSON client with Julia # # author: Atsushi Sakai # using Requests function main() println(PROGRAM_FILE," start!!") url = "http://localhost:8000" json = Requests.json(Requests.get(url)) println(json) println(PROGRAM_FILE," Done!!") end if length(PROGRAM_FILE)!=0 && contains(@__FILE__, PROGRAM_FILE) @time main() end
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。