BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース クラウドでは、RPCとRESTのどちらがよいのか?

クラウドでは、RPCとRESTのどちらがよいのか?

原文(投稿日:2011/02/13)へのリンク

前回の記事では、クラウド分野の先駆者が利用していない状況で、RESTはクラウドにとって重要なのかどうかというWilliam Vambenepe氏の問いかけに関して議論を行った。私たちが記事を公開した後に、William氏は、より多くのフィードバックを得て、多くの人が無視しているか、見逃し続けている元々のエントリの中心となる考えをより明確にしようとした。その考えとは、開発者にとって、ベースとなるオブジェクトやRPCといった言語の構成による相互作用のメカニズムから離れたところで、RESTによって実装されたものは、実態のないものになりがちというものだ。William氏は次のように述べている。

メソッド呼び出しは、通常の開発者が通常のコードを書く方法だ。これをネットワーク越しでも行えば、リモートAPIを呼び出す上で、もっとも変更が小さくて済む。RPCの複雑さとは、概念的なものでは決してなく、配管にあたる部分にあるのだ。どうやってメソッド呼び出しをシリアライズして送信するのか。CORBA、RMI、SOAPは、それを達成しようとしてきた。しかし、単純さを保ったまま、インターネットで一般的になるほどは成功しなかったのだ。XML-RPCは、どうしてか(そして不幸なことに)そのプロセスで後回しにされてきたのだ。

氏が指摘しているように、AWSはXML-RPCと非常によく似たアプローチを採用している。Amazonはアプローチのなかでトレードオフを行っているが、全体的にAmazonはプログラム的な視点を採用し、概念的にシンプルでありながら、強力な(なおかつ使いやすい)ものになっている。しかしながら、多くの人は、依然、反対の考えを持っているようだ。例えば、Mike Pearce氏は次のように述べている。

確かに私はRESTafarian(不健全なほどRESTに喜びを見いだす人々を表す造語)だが、実際のところ、Amazonは何も証明しておらず、無礼であり、開発者を軽視している。

Willian氏の最新の投稿では、Mike氏の懸念のすべてに対応しようとしている。例えば、Mike氏は次のような疑問を投げかけている。

AWSは独自の実装を利用しており、標準、例えば、そうだな思いつかないな、RESTのようなものを採用していないという事実は、AWSと通信するために他の方法を学びたくないという開発者をいらつかせているのではないか。

Mike氏はこの問いに対して賛成なのだが、William氏は次のように反論している。

参ったね。私は、RESTを理解しようと格闘している多くの開発者に出会ってきた。RPCに怖じ気づく開発者には会ったことがない。RESTが「標準」であるという主張に対しては、その仕様を読んでみたいものだ。お願いだから博士論文を指し示さないでくれ。

William氏によると、重要なのはRESTがクラウドの進化にとって重要かどうかではなく、実際のところは、RESTが必要とされ、相当の違いが(開発者や実装者にとって)あらわれるところまでクラウドが進化するかどうかだ。William氏の見立てでは、単一ベンダーが提供する範囲ではRESTの利点は限られているとのことだ。

クラウドAPIの利用パターンは、RESTの規則に従う利点が切実なものとなるところまで進化するかもしれない。我々はまだそこまで至っておらず、正直にいうと、固唾をのんでそれを待つという状態でもないと思う。差し迫った問題がクラウド・プロバイダ間の連携のものになるまでには、クラウドサービスに数多くの機能的な改善が必要だ。そして、共通のRESTful APIは、連携のためのもっとも簡単な方法になるだろうが、共通のRPC APIもとても満足のいく扱いやすさを提供するだろう。問題となるのは、主にプロトコルではなく共通のセマンティックなのだ。

RESTの利用はプログラムインターフェースに隠蔽されるというWilliam氏の前提に対して反対の考えもある。このレベルは本当に重要なのだろうか?しかし、氏の最初の記事に対してひとりのコメント記入者が次のように述べている

大半のAWS(もしくは他のクラウドプロバイダ)のユーザはAPIを目にすることはない。彼等はプログラム言語用のライブラリやWebベースのクライアントアプリケーションを経由してAPIを利用している。従って、実際に関心のある人は、RESTafarianたちと、(私のような)ライブラリ開発者だけだ。おそらくAPIがひどすぎると人々が使わないという可能性もあるのだろうが、AWS Query APIは、悪いというところからはかけ離れている。非常に一貫性があり、とてもコードを書きやすい。単にRESTでないというだけだ。AWSのすべてが同一の方式でないということにも何の意味もない。S3やCloudFront、Route53 APIは、ずっとRESTfulなのだ。

William氏の最近の投稿を貫くテーマは、優れたプログラムインターフェースはRESTでないAPIアプローチを隠蔽し、その上で利用しやすいが、その逆は必ずしも真ではないというものだ。良いインターフェースとその下の層でのRESTの組み合わせは、業界が最終的に到達する天国かもしれないが、現時点ではクラウドの成功にとって、必要条件でも十分条件でもない。エラーハンドリングを含んだプログラムインターフェースとともに、リソースのセマンティックを正しく整えることが、RESTfulインターフェースよりも、開発者にとっておそらくより重要である。

もし、RPC APIが十分に整合性をもっており、その基盤となるモデルがREST APIであれば、おそらく素晴らしいのなのだろう。

この記事に星をつける

おすすめ度
スタイル

BT