2011-06-27 20 views
0

オブジェクトとIDと名前で構成されるWidgetがあるとします。クライアントが新しいWidgetオブジェクトをPOSTできるエンドポイント/ widgetを公開するとしましょう。 IDフィールドをクライアントが変更することはできませんが、依然としてクライアントには見えるようにするには、IDフィールドを変更できないと宣言することはできますか?私はそれが何か違いがあれば、RESTeasyを使っています。RESTful APIの特定のフィールドへの更新を制限する

答えて

0

私はいくつかのオプションを考えることができます。

まず、表現の一部としてIDを公開する必要がありますか?それとも、新しい投稿されたリソースの場所を返すだけで十分ですか?

あなたのクライアントのポスト:

<Resource><Name>New Resource</Name></Resource> 

そして、あなたが応答:その向こう

HTTP/1.1 201 Created 
... 
Location: /resources/{new_resource_id} 

は、私はそれはあなたのクライアントとのいくつかの簡単な、よく理解規則を持ってOKだと思います。ほとんどの開発者は、IDがシステム生成される可能性が高いことを理解していると思います(特にPUTではなくPUTを実行しているため)。あなたは、任意の読み取り専用フィールド持っている(または他の検証をや情報を表示する)あまり目立たない例については、私はそれは、メタデータへのリンクを提供するために意味をなすかもしれないと思う:までですのようにメタデータが見える何

<NewPersonForm> 
    <atom:link href="/people/new/metadata" rel="/rels/metadata" /> 
    <Name /> 
    <Department>HR</Department> 
</NewPersonForm> 

あなたが、これらの線に沿って何かあなたのために働くかもしれない:

<Metadata> 
    <Element> 
     <Name>Department</Name> 
     <IsReadOnly>True</IsReadOnly> 
    </Element> 
</Metadata> 

クライアントに情報を提供するために、素敵な、フォーマットニュートラル(それはXMLとJSONの両方に適しています)方法だ、と彼らは本当にしたい場合は、彼らは、フォームに基づいてフォームを構築することができます(検証情報、言語固有のラベル、データ型情報を提供するために使用します)。

こちらがお役に立てば幸いです。

ジョン

0

あなたは何でも自由に行うことができるコードをサーバーに書きます。それには、必要に応じてデータの追加や変更が含まれます。

サーバが POSTさエントリを変更して自由であるので、例えば、原子の 内容を変更することにより、::id要素を、 エントリを返すことに役立つことができ、明示的に述べてAtomPub protocol section 9.2をチェック クライアントのクライアントビューとサーバービューに の新しい エントリを関連付けることができます。

関連する問題