を使うのに、今一度
で使い方を整理する。
前回
注意
参照文献はかなり古い(2019年)ため、現在のバージョンでは動作しない関数などが多いとの評判がある。そこでそういった齟齬があった場合は随時コメントする。なお筆者の環境は、
アプリケーション | バージョン |
---|---|
である。
2. Juliaによるデータエンジニアリング
2.4 RESTfulサービスの作成
を用いてタスクや情報をコンピュータ館でやり取りするようにシステムを構築する方法をと呼び、経由でアクセスできるアプリケーションをアプリケーションと呼ぶ。
############################ ### RESTサービスを作成① ### ############################ using Sockets # 8080番ポートで通信を待ち受けるサーバーを作成する server = Sockets.listen(8080) # 任意のJuliaコマンドを実行するWebサービスを作成する while true sock = Sockets.accept(server) data = readline(sock) print("Got request:\n", data "\n") cmd = split(data, " ")[2][2:end] println(sock, "\nHTTP/1.1 200 OK\nContent-Type: text/html\n") println(sock, string("<html><body>", cmd, "=", eval(Meta.parse(cmd)), "</body></html>")) close(sock) end
############################ ### RESTサービスを作成② ### ############################ import JuliaWebAPI import ZMQ # Webサービスとして公開される関数 function testfn(arg1, arg2, optarg1 = "10", optarg2 = "20") println("T: ", arg1, " ", arg2, " ", optarg1, " ", optarg2) return parse(Int, arg1) + parse(Int, arg2) + parse(Int, optarg1) + parse(Int, optarg2) end # ZeroMQサーバのパラメータを定義 tr = JuliaWebAPI.ZMQTransport("tcp://127.0.0.1:9999", ZMP.REP, true) apir = JuliaWebAPIResponder(tr, JuliaWebAPI.JSONMsgFormat()) register(apir, testfn; resp_json=true, resp_headers = Dict("Content-Type" => "application/json;charset=utf-8")) process(apir) # 以下、新しいJuliaのREPLを開いて以降を行なう using JuliaWebAPI const apiclnt = JuliaWebAPI.APIInvoker("tcp://127.0.0.1:9999") JuliaWebAPI.run_http(apiclnt, 8888) # 左記コマンドは永遠に動作するため、Ctrl+Cで停止する
では簡単にネットワーク接続できる。ネットワーク接続はファイルと同じように扱うことができる。一度ネットワーク接続を行なえば、後は他のデータストリームと同じように読み書きできる。サービスを1から作成する場合、プログラマがプロトコル固有のメッセージの送信を行わなければならない。同様にサービスに対して低レベルな で接続する場合であっても、プログラマが適切なリクエストを送り、出力を読み込むようにしなければならない。
パッケージを用いれば簡単にの関数をサービスとして公開できる。
2.5 JSONデータを処理する
は人間にも読める形でコンピュータ間でデータを交換するためのデータ形式で、特にでは広く用いられている。
ではモジュールを用いればよい。
############################ ### JSONデータを処理する ### ############################ using JSON json_txt = """{ "key":"value", "number":7, "array":[1,2,5], "dict":{"k1":"val1","k2":2} }""" println(json_txt) # 定義した文字列をパースする JSON.parse(json_txt) # Juliaのデータ構造をJSONに変換することもできる data = Dict{Int64, Union{Int64, String}}(1=>"text", 2=>999) # JSONデータを書き込む f = open("file.json", "w") JSON.print(f, data) close(f) # JSONデータを読み込む f = open("file.json", "r") data2 = JSON.parse(f) close(f)