スクリプトのお勉強 技術

Rustのお勉強をしてみる(XMLRPCクライアント編)

投稿日:

なんとなく手付かずだったので、Rustの勉強をしてみようと思います。

手始めとして、なぜかXMLRPCクライアントを作ってみます。

環境

  • WSL2
  • Ubuntu 22.04 LTS

Rustインストール

インストール方法は以下です。

以下で自分のホームディレクトリにインストールします。

$ curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh
$ source ~/.bashrc
$ rustc -V
rustc 1.66.0 (69f9c33d7 2022-12-12)

XMLRPCサーバ側(Python)

RustでXMLRPCクライアントを作ろうと思いますが、接続先のXMLRPCサーバは面倒なのでPythonで作成します。

add関数を提供してみます。戻り値はあえて辞書にしてます。

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler

# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)

# Create server
with SimpleXMLRPCServer(('localhost', 9000),
                        requestHandler=RequestHandler) as server:
    server.register_introspection_functions()

    # Register a function under a different name
    def adder_function(x, y):
        return dict(result=x + y)

    server.register_function(adder_function, 'add')

    server.serve_forever()

Rust開始

以下まで準備しました。

$ cargo new rust-xmlrpc
$ cd rust-xmlrpc
$ cargo run
   Compiling rust-xmlrpc v0.1.0 (/home/tanino/script-plactice/rust-xmlrpc/rust-xmlrpc)
    Finished dev [unoptimized + debuginfo] target(s) in 0.44s
     Running `target/debug/rust-xmlrpc`
Hello, world!

あとlibssl-devをインストールする必要があります。でないとcargo run時に落ちます。

$ sudo apt instlal libssl-dev

XMLRPCクライアントのサンプル

いよいよXMLRPCクライアントです。

 Calgo.toml

要は、dependenciesにxmlrpcを入れます。

[package]
name = "rust-xmlrpc-client"
version = "0.1.0"
edition = "2021"

[dependencies]
xmlrpc = "0.15.1"

src/main.rs

クライアント部分は以下です。

extern crate xmlrpc;

use xmlrpc::Request;

fn main() {
    let add_request = Request::new("add").arg(2).arg(8); // Compute 2 + 8

    let request_result = add_request.call_url("http://127.0.0.1:9000/RPC2");

    println!("Result: {:?}", request_result);

    let _add_result = request_result.unwrap();

    println!("_add_result: {:?}", _add_result["result"]);
}

起動結果

起動すると以下になります。ちゃんと辞書として結果が返ってきているのがわかります。

$ cargo run
   Compiling rust-xmlrpc-client v0.1.0 (/home/tanino/script-plactice/rust-xmlrpc/rust-xmlrpc)
    Finished dev [unoptimized + debuginfo] target(s) in 2.41s
     Running `target/debug/rust-xmlrpc-client`
Result: Ok(Struct({"result": Int(10)}))
_add_result: Int(10)

おわりに

思った以上に簡単でした。次は、REST APIのserverとclientを作ろうと思います。

参考

  • RustのXMLRPC(標準?)
    https://docs.rs/xmlrpc/latest/xmlrpc/

-スクリプトのお勉強, 技術

執筆者:

関連記事

no image

GLP-1 メディカルダイエット 58日目

メディカルダイエットして58日目の記録をしておこうと思います。 9回目。 今回は左腹(中部)に打ちました。痛いのはいまだに慣れない。。 土曜にゲットしてした 渋谷に行ってきたが、そこの医院には相変わら …

Pipenv vs Poetry

1. はじめに Pythonでお仕事していると、どうしても、環境設定を行う必要があります。 本番環境で動作するように、設定しなければいけないからです。 いろんな状況はあるでしょうが、私がかかわるプロジ …

CentOS7 + Django2.2 + uwsgi + nginx 連携方法

Djangoとnginx連携方法 以前はApache経由で連携しましたが、今回はnginxと連携する方法を記述します。 環境 設定した環境は以下です。 OS: CentOS7Python3.6.8 ( …

Python Falconによる REST APIの作成

1.はじめに 最近、仕事では、あまり技術的なことをしてませんで。。今回は、pythonのFalconというWebアプリケーションフレームワークを使用し、REST APIを作成します。 前回は、Djan …

故障物(8インチタブレットからBMAX MaxPad l11に)

ついに故障 ついに8インチタブレットがほぼ故障しました。「ほぼ」というのは、バッテリーが使えずずっと電源線に繋げてないと使えないからです。 それではタブレットの意味がありません。 つぎは10インチタブ …

    google オプトアウト Click here to opt-out.