It is not a must, but if you plan to write a client in a language for whom DMSContainer provides a proxy, you can speed up your work.
Go to https://localhost/info and download your proxy for your language.
The JSON-RPC interface can be consumed from all the languages and tools able to send an HTTP request. Let’s see how to use it from a Python script and a Delphi program.
This is a Python script which invokes the JSON-RPC method published by out sample job.
NOTE: The script requires the package requests
installable using the pip
tool. More information here
import requests
import json
import urllib3
# DMSContainer is published by default under HTTPS using a self signed certificate,
# so we need to ignore the warnings, or in production, replace the
# certificate with a valid one.
urllib3.disable_warnings()
def main():
first_number = second_number = ''
while not first_number.isnumeric():
first_number = input("First number: ")
while not second_number.isnumeric():
second_number = input("Second number: ")
url = "https://localhost/calculatorrpc"
headers = {"content-type": "application/json", "accept": "application/json"}
payload = {"method": "sum", "params": [int(first_number), int(second_number)], "jsonrpc": "2.0", "id": 1}
response = requests.post(url, json=payload, headers=headers, verify=False).json()
result = response['result']
print(f"{first_number} + {second_number} = {result}")
if __name__ == "__main__":
main()
This is an example of a script launch.
C:\> python rpc_calculator_client.py
First number: 3
Second number: 4
3 + 4 = 7
This is a Delphi project which invokes the JSON-RPC method published by out sample job.
unit MainFormU;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils,
System.Variants, System.Classes, Vcl.Controls, Vcl.Forms,
Vcl.StdCtrls, Vcl.ExtCtrls, System.Net.URLClient;
type
TMainForm = class(TForm)
edtFirstNum: TLabeledEdit;
edtSecondNum: TLabeledEdit;
btnDoSum: TButton;
lblResult: TLabel;
procedure btnDoSumClick(Sender: TObject);
private
procedure ValidateCertificateEvent(
const Sender: TObject;
const ARequest: TURLRequest;
const Certificate: TCertificate;
var Accepted: Boolean);
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses
System.NetEncoding, System.IOUtils,
MVCFramework.JSONRPC, MVCFramework.JSONRPC.Client;
{$R *.dfm}
procedure TMainForm.btnDoSumClick(Sender: TObject);
var
lReq: IJSONRPCRequest;
lResp: IJSONRPCResponse;
lRPCExecutor: IMVCJSONRPCExecutor;
begin
lRPCExecutor := TMVCJSONRPCExecutor.Create('https://localhost/calculatorrpc');
lRPCExecutor.SetOnValidateServerCertificate(ValidateCertificateEvent);
lReq := TJSONRPCRequest.Create(1234, 'sum');
lReq.Params.Add(StrToInt(edtFirstNum.Text));
lReq.Params.Add(StrToInt(edtSecondNum.Text));
lResp := lRPCExecutor.ExecuteRequest(lReq);
lblResult.Caption := 'Result = ' + IntToStr(lResp.Result.AsInteger);
end;
procedure TMainForm.ValidateCertificateEvent(const Sender: TObject;
const ARequest: TURLRequest; const Certificate: TCertificate;
var Accepted: Boolean);
begin
Accepted := True; // do not check certificate
end;
end.
This is an example of a program session.