2

現在、既存の Rest サービスにアクセスするための C または C++ ライブラリを設計する準備をしていますが、よくわからない点は次のとおりです。

私が見たこのようなほとんどの API クライアント ライブラリは、ReST API に非常に近い呼び出しスタイルを提供するだけであり、使用するには ReST API ドキュメントを読む必要があります。それらは、IMO言語のネイティブスタイルで実際に書かれているわけではありません。それらは基本的に http ライブラリ、おそらく XML/JSON ライブラリをラップし、auth のようないくつかの特別なものを処理します:

スタイル 1:

paramList.add( "name", "Joe" )
response = makeARestCall( POST, "path/to/resource", paramList, miscAuthData );
if( result.code == 200 ) {
    //success
    xml = response.getXml();
    somethingWeCareAbout = xpath.parse( xml, "response/something/we/care/about" );
    print somethingWeCareAbout
} else {
    print "Something went wrong"
}

API よりも言語の規則を使用する方が、私にははるかに自然に思えます。リソースにアクセスするのではなく、関数の呼び出しとして API を使用することを考えています。

スタイル 2:

try {
   Api.setName( UserId, "Joe" );
   print Api.getSomethingWeCareAbout();
} catch( ApiException e ) {
   print e.getMessage();
}

私は後者のスタイルで API ライブラリを作成しましたが、それらはより多くの作業を必要としますが、特に複雑な ReST API の場合、アプリに使用して統合する方がはるかに自然だと思いますが、これについてはあまり経験がありません。

あるスタイルが他のスタイルより明らかに優れているか? 開発の容易さ以外に、ほとんどが最初のスタイルで書かれているように見える理由はありますか?

このライブラリは間違いなくマルチスレッド アプリや UI で使用されるため、スレッド化を念頭に置いて回答してください。

4

1 に答える 1

1

これを熟考した後、私自身の質問に対する部分的な答えは、おそらく最初のスタイルの方がマルチスレッド化が容易だということです。ライブラリを使用している人は、次のような関数を作成できます。

void asyncRestCall( Method method, String resource, map<String,String> parameters, misc misc, function onCompletion ) {
    //fork a new thread
    ...

    //do the call
    result = makeARestCall( method, resource, parameters misc );

    //back in original thread
    ...

    onCompletion( result );
}

一方、スタイル 2 で関数呼び出しごとに 1 回行うのは、はるかに手間がかかります。

于 2012-08-16T19:25:33.680 に答える