MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

各プログラミング言語におけるシンプルなJSONサーバ・JSONクライアントの作り方

目次

はじめに

最近、様々な言語で作られたツールを連携するのに、

JSONファイルを使っているのですが、

myenigma.hatenablog.com

今回は、そのJSONファイルを様々なプログラミング言語でやり取りするための

シンプルなJSONサーバ・JSONクライアントのコードを紹介したいと思います。

 

紹介するコードはすべて下記のリポジトリで公開しています。

github.com

順次、対応言語も増やしていく予定です。

 

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モジュールと、

github.com

JSONパーサとして、JSONモジュールを

github.com

使用しています。

#
# 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モジュールを

利用しています。

github.com

#
# 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.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com