RESTインターフェースを「真にRESTful」にすることで問題を「解決」するために、ベンダー固有のMIMEタイプを推奨するフレームワークとチュートリアルをいくつか見てきました。
このアプローチの問題点の 1 つは、その性質上、ハイパーメディア駆動型 REST サービスへの移行の全体的なポイントが API とサービスのモデルを変更して変更することである場合に、希望どおりに「機能させる」ためのハッキングまたはチートであることです。問題にどのようにアプローチするか。の「有効な」または許可されているが推奨されていない HTTP 値をこっそり入力することContent-Type
は、飢えたベネズエラ人にネズミは魚であり、四旬節の間に罪を犯さずに食べることができると告げるようなものです。ネズミしか食べられないのに、何か悪いことはありますか? おそらくそうではありません。しかし、それを魚のふりをすることはそれを魚にしますか? もちろん違います。コントラクト駆動型のインターフェイスが必要な場合は、RPC または SOAP を使用するか、カスタム ベンダーの MIME タイプを使用してください。しかし、仕様を指して休息だと言ってはいけません。
2 つ目の問題は、手抜きをすると、ハイパーメディア主導のインターフェイスの実際の見返りが失われることです。すぐに、ユーザー エージェントと独自のサーバーで問題が発生し、MIME タイプに慣れていないためにフープをジャンプするか、単にあきらめなければなりません。すべては、本当のRestサービスの主張でクライアントに感銘を与えたり、契約の余分な重み(明らかにいくつかのコンテキストでは価値があります)を減らすことで負荷を少し軽減したりすることがポイントではない場合に、両方の方法を持つことができると考えたからです-駆動型の相互作用であり、サービスが実際に外部クライアントと相互作用する方法を変更することでした。
最後に、ベンダー固有の MIME タイプが実際に定義済みのエンドポイントよりも優れたコントラクトをどのように強制するかについて、私は本当に不明です? このテクニックに言及しているすべてのサイトは、このオプションが存在することで安堵しているように見えます。率直に言って、技術的には「いたずら」であることを知っているように、少し独善的であり、それを使用していることを喜んでいますが、それはとても簡単で修正されていますすべての。それは何を修正しますか?person
あなたの場合、受信リクエスト/コンテンツを次の場所に送信しないのはなぜですか。
POST /myRestService/people
また、他のリクエストがある場合、それは他のデータ型を対象とした別のエンドポイントに送られますか? method が必要な場合は、次のdoes_something
いずれかを使用しませんか。
GET /myRestService/people/personID_123/does_something
また
GET /myRestService/people/does_something/personID_123
正確な文脈に応じて?
そして、私が意地悪な上に意地悪に聞こえないように、欲求不満や怒りはあなたやあなたの質問に向けられているのではなく、ベンダーのマイムタイプの「解決策」と誰もが開発した強迫観念に向けられています」ロイ・フィールディングが公式に承認し、有効な REST サービスとしてスタンプを押した」ということは、明らかに誰も実用的な公開例を提供することさえできず、必要な近道をとってすぐにそれを採用するという切迫感だけを残しており、恥と対処することができます。ショートカットが引き起こした問題を実際に修正するときに、後で指を指します。