web-dev-qa-db-ja.com

GWTRPCデータ形式

Google Web Toolkit(GWT)RPC呼び出しのデータ形式はどのように見え、IsSerializableオブジェクトはどのように送信されますか。 Java Serializableはある種のバイナリ形式を送信することを知っていますが、これはGWTにも当てはまりますか?(JavaScriptとの互換性が期待できないため、または少なくとも追加が必要なため)解析)。

31
Stefan

編集:Brian Slesinskyがプロトコルを文書化したばかりです(コードをリバースエンジニアリングすることにより): https://docs.google.com/document/d/1eG0YocsYYbNAtivkLtcaiEE5IOF5u4LUol8-LL0TIKU/edit

まず、GWT-RPCプロトコルは非対称であるため、常にクライアント側に最適化されます。サーバーから送信されるものを高速で逆シリアル化し、送信するものを高速でシリアル化します。

ご想像のとおり、これは明らかにバイナリではなく、テキストベースです。クライアントからサーバーへのプロトコルはパイプで区切られますが、サーバーからクライアントへのプロトコルはJSONに基づいています(//OKまたは//EXプレフィックスは、リクエストが成功したか失敗したかを示します)。どちらも、シリアライズ可能なクラスの一般的な知識を使用して、シリアライズ/デシリアライズします。たとえば、両側は、クラスXに整数と文字列の2つのフィールドがあり、この順序でシリアル化されていることを知っているため、どちらも整数と文字列の書き込み/読み取りを行います。エンコードされた形式でフィールドを指定する必要はありません。約。

GWT-RPCプロトコルはバージョン管理され(新しいGWTバージョンがリリースされると定期的に変更されます)、クラスのハッシュとシリアル化可能なフィールドの名前を使用して、クライアントとサーバーの両方が同じバージョンのクラスを使用するようにします(つまり、再コンパイルする必要があります)シリアライズ可能なクラスを変更するたびに、クライアントコードを再デプロイします)。

最良のドキュメントはコードですが、リクエスト形式の概要は次のスライドにあります: https://www.owasp.org/images/7/77/Attacking_Google_Web_Toolkit.ppt

RequestFactoryは、GWT-RPCとは異なり、対称JSONベースのプロトコル(AutoBeanのJSONシリアル化に基づく)を使用します。同じコードからコンパイルされていない場合でも、クライアントとサーバーは通信できます(もちろん、バージョン間で行った変更によって異なります)。 )、クラス名とプロパティ名を渡すためです。

53
Thomas Broyer