クライアント側 JavaScript から XML-RPC サーバーとの通信を他の方法よりもはるかに簡単にする jQuery プラグインを作成しました。rtorrent クライアントと正常に通信する独自のアプリケーションで使用しました。スタンドアロン プラグインとして公開しました: jquery-xmlrpc
ユーザーはプラグインに対して 2 つの問題 ( #1と#2 ) をログに記録し、無効な XML-RPC の解析に失敗したと述べています。問題の無効な XML-RPC は空の<value>
ノードです。ユーザーは、無効な XML-RPC ドキュメントを送信している XML-RPC サーバーを処理しています。<nil>
、空の文字列、および不正な空の<value>
ノードを含む、次の XML-RPC ドキュメントについて考えてみましょう。
<struct>
<member>
<!-- A null value -->
<name>nilElement</name>
<value><nil /></value>
</member>
<member>
<!-- An empty string -->
<name>emptyString</name>
<value><string></string></value>
</member>
<member>
<!-- Invalid XML-RPC -->
<name>badEmptyValue</name>
<value></value>
</member>
</struct>
最初は、誤って空の<value>
ノードを処理し、それらを<nil/>
/null 要素として扱ってよかったです。これは奇妙な特殊なケースのように見えましたが、扱いやすく、ロバストネス プリンシパルの精神に沿ったものでした。
「受け入れるものはリベラルに、
発信するものは保守的に」
しかしその後、問題が更新され<value>
、次のように、動作の悪いサーバーもノードで生の文字列を送信したことがわかりました。
<!-- Correct string encoding -->
<value><string>Hello, World!</string></value>
<!-- Incorrect string encoding -->
<value>Raw, incorrect string</value>
この時点で、リモート サーバーはまったく正しくありません。これは有効な XML-RPC ではありません。しかし、ロバストネスの原則は、私が何を受け入れるかについて自由であるべきだと述べています。
ロバストネスプリンシパルはどこまで取るべきですか? 生の文字列を受け入れる必要がありますか? 他のユーザーに、動作の悪い XML-RPC サーバーに対してバグを記録するように伝えて、拒否する必要がありますか? 不適切な入力の受け入れが度を越してしまうのはどの時点ですか?