2010-11-20 6 views
1

J'ai une API en C# qui ne sera pas mappée à JSON-RPC en raison du fait que JSON-RPC est orienté Procédurellement. Comment dans JSON-RPC représenteriez-vous une API orientée objet?
je peux bien sûr utiliser les extensions JSON-RPC de sorte que la demande ressemblerait à ceci:Comment approcher une API orientée objet avec JSON-RPC?

{ "jsonrpc":"2.0", method:"ObjectName.Method", "params":[], "id": 1 } 

Mais il se sent un peu hackish et nécessite aussi beaucoup de travail à définir. Je peux aussi l'inclure en paramètre mais encore une fois ça ne me semble pas juste.
Existe-t-il une meilleure pratique concernant l'utilisation d'une API orientée objet à l'aide de JSON-RPC?

Répondre

4

JSON-RPC est JSON distant Procédure Appel et par défaut orienté procédure. Cependant, si vous travaillez sur HTTP, vous pouvez voir chaque service RPC en tant qu'objet. C'est à dire. si vous accédez /foo/bar et appelez beep sur JSON-RPC sur HTTP, puis vous appelez beep méthode de foo service de bar objet.

Sinon, vous pouvez le faire de la façon dont tous les POO mis en correspondance sur des appels procédure:

foo.bar(x1,x2) -> bar(foo,x1,x2) 

Où foo est « pointeur » à l'objet, pour RPC, il peut être l'objet UUID. (C'est ainsi que cela se fait dans certains RPCS).

Vous appelez

f=new integer(0); 
f.add(10); 
f.add(20); 
x=f.get(); 
delete f; 

Goes to:

client: new("integer",0) 
server: return "23ab3cb45" 
client: add("23ab3cb45",10); 
client: add("23ab3cb45",20); 
client: get("23ab3cb45"); 
server: return 30 
client: delete("23ab3cb45"); 
+0

donc une méthode d'extension n'est pas une bonne idée et je devrais passer comme paramètre? –

+0

@the_drow Non parce que (a) vous vous limitez à un objet spécifique, donc vous ne pouvez pas allouer des objets dynamiquement (b) AFAIK utilisant des ID d'objet est une pratique courante dans RPC. (c) En utilisant "." dans le nom des méthodes n'est généralement pas si bonne idée (IMHO) – Artyom

+0

@Artyom curieux si "généralement" en utilisant '.' ce n'est pas une bonne idée. Par exemple pour un problème différent, je trouve "questions.nouveau", "questions.non réponse" lisibles et acceptables. Votre commentaire est-il spécifique à un langage/implémentation/cas d'utilisation en question? – Shekhar

Questions connexes