Devo usare un linguaggio di programmazione strongmente tipizzato per un'integrazione con un'API JSON RPC 2.0?

-2

Devo integrarmi con le API di un'altra azienda, che sfortunatamente hanno deciso di scrivere in JSON RPC 2.0.

Se non hai familiarità con JSON RPC, è un protocollo RPC leggero che definisce una richiesta che deve sempre avere la struttura: jsonrpc, method, params, id.

Ecco una richiesta di esempio che potrei fare:

{
    "jsonrpc": "2.0",
    "method": "100",
    "params": ["en", 123455678, "5.00", [["3", "1.00", "1"], ["4", "4.00", "1"]]],
    "id": 100
}

Ecco una risposta di esempio a cui potrei tornare:

{
    "jsonrpc": "2.0",
    "id": 100,
    "result": [
        "0",
        "0",
        "0",
        "20180723-0",
        []
    ]
}

Ho già sviluppato le mie API dell'app in C # e li ho ospitati su Azure, quindi stavo pensando che fosse più facile creare una libreria di classi in C # e fare riferimento alla libreria nella mia API (dove avrei bisogno di usarla).

Ma quando ho iniziato a sviluppare l'API in C # ho iniziato a rendermi conto di quanto sarebbe stato difficile da quando C # è stato così strongmente digitato. Penso che sarebbe ancora possibile in C # grazie alla digitazione dinamica, ma sembra un po 'eccessivo usare C #.

L'altra opzione che stavo pensando sarebbe di usare NodeJS, o anche Python. Ho creato alcuni piccoli script NodeJS e li ho ospitati in AWS Lambda, ma non ero soddisfatto dei ritardi di avvio di AWS Lambda. Questa applicazione si occupa di carte regalo, quindi voglio che l'integrazione sia il più veloce possibile.

Almeno con NodeJS e Python non sono così strongmente tipizzati, e quindi l'accesso ai valori specifici delle richieste che ottengo sarebbe abbastanza facile rispetto a quello che penso avrei dovuto fare con C #. Inoltre, sono l'unico sviluppatore della mia azienda, quindi sono disposto a sacrificare un po 'di manutenzione per un po' di tempo.

    
posta Joshua Kemmerer 23.07.2018 - 17:38
fonte

1 risposta

1

Sembra che tu possa implementare il modello con i generici

public class JsonRpcRequest<T>
{
    public string jsonrpc {get;set;} = "2.0";
    public int id {get;set;}
    public T params {get;set;} //serialise as object or array
    public string method {get;set;}
}

public class JsonRpcResponse<T>
{
    public string jsonrpc {get;set;}
    public int id {get;set;}
    public T result {get;set;}
    public Error error {get;set;}
}

O semplicemente gestisci una serializzazione personalizzata nella tua classe cliente.

Nota: invio parametri

la specifica consente due modi di inviare parametri:

Parameters for a procedure call can be specified by-position, or by-name.

by-position: params MUST be an Array, containing the parameters in the right order (like in JSON-RPC 1.0).

by-name: params MUST be an Object, containing the parameter-names and its values. The names MUST match exactly (including case) the names defined by the formal arguments. The order of the name/value-pairs is insignificant.

Il serializzatore standard Json.Net serializzerà il tuo oggetto params come un oggetto json, che incontrerà il secondo modo di inviarli.

Se devi inviare come array, puoi utilizzare un serializzatore personalizzato per il tipo, OPPURE convertire manualmente in un array di oggetti nel metodo client, ovvero

public void GetData(int p1, string p2)
{
    JsonRpcRequest.params = new object[] {p1,p2};
    send(JsonRpcRequest);
}
    
risposta data 23.07.2018 - 17:49
fonte

Leggi altre domande sui tag