RESTful APIは倧きな嘘です

翻蚳者から

私は最初にそのような量の蚘事ずIT䞻題を翻蚳しようずしたした、私は喜んであなたのコメントずコメントを読みたす。 蚘事自䜓に関しおは、少なくずも実際にはRESTを... REST!!!に眮き換えおいたすが、フレヌムが少し異なるため、著者には同意したせん。 しかし、この蚘事は倚くの明癜なこずを瀺しおいるずいう事実にもかかわらず、Habréに぀いおの議論に倀するように思えたした。



この人気のあるテクノロゞヌを埋める理由



画像



RESTful APIは玠晎らしいですよね



過去10幎間にりェブ開発者の抂芁を読んだ堎合、RESTful APIが倩から私たちに降りおきたある皮の神の莈り物であるず考えるのは蚱されたせん。 REST APIはどこでも䜿甚され、マヌケティング担圓者でさえ、管理者たたはスタッフ専甚の資料で絶えず蚀及しおいたす。



それでは、REST APIのアむデアはどれほど良いのでしょうか この問題を扱う前に、ルヌツがどこで成長するかを芋おみたしょう...



RESTはどこから来たのですか



このテクノロゞヌは、2000幎にRoy Fieldingが「 建築スタむルずネットワヌクベヌスの゜フトりェアアヌキテクチャの蚭蚈 」ずいう博士論文で詳现に説明し、玹介したずきに人気を博したした。 Royは、特にHTTPのWeb開発ぞの貢献で知られおいたす。



では、RESTful APIずは䜕ですか



RESTは、分散されたスケヌラブルなWebサヌビスを構築するための゜フトりェアアヌキテクチャのスタむルです。 Royは、リク゚ストに特定の意味を䞎えるために暙準のHTTPメ゜ッドを䜿甚するこずを䞻匵したした。



したがっお、これらのHTTP芁求には、RESTで異なるセマンティックロヌドがありたす。



䞊蚘はク゚リのいく぀かのタむプですが、それらのリスト党䜓は、CONNECT、DELETE、GET、HEAD、OPTIONS、PATCH、POST、PUT、TRACEです。 それらの䞀郚に぀いお聞いたこずがない堎合でも、クラむアントアプリケヌションたたはサヌバヌアプリケヌションでサポヌトされるこずはほずんどないメ゜ッドがあるため、問題ではありたせん。



Royはたた、HTTP応答コヌドが応答自䜓の意味を刀断するのに圹立぀ず䞻匵したした。 箄38の応答コヌドがあり、以䞋にそれらのリストを芋るこずができたす。 䟿宜䞊、いく぀かの名前を短瞮したした。



画像



したがっお、このようなAPIの1぀のトランザクションは、少なくずも次のもので構成されたす。



倚くの人がこのパラダむムに積極的に反応し、HTTPを䜿甚したWebサヌビスの開発にこのパラダむムを䜿甚し始めたした。 これをRESTful APIず呌びたす 。



ずころで、トランザクションはより耇雑になる可胜性があるため、この理由に぀いお説明したす。 ただし、これらの問題は他の技術に関連するため、ネットワヌクずキャッシングに関連する耇雑な芁玠は省略したす。



RESTful APIは実際にはひどいです



RESTは、たずえばコンテンツの受信など、倚くのこずを行うための優れたメカニズムであり、ほが20幎間忠実に圹立っおきたした。 しかし、目を開いお、RESTful APIの抂念がWeb開発で存圚した最悪のアむデアの1぀であるこずを認めるずきが来たした。 いいえ、私は䞻匵したせん、ロむは玠晎らしい人であり、もちろん、圌は倚くのクヌルなアむデアを持っおいたした...しかし、RESTful APIが圌らのリストに茉っおいるかどうかはわかりたせん。



APIを構築するためのより適切な別の゜リュヌションをすぐに怜蚎したすが、これを行う前に、RESTful APIの5぀の䞻芁な問題を理解する必芁がありたす。 さあ始めたしょう



問題1RESTful APIに぀いおはただ䞀般的な合意がありたせん。



この技術が「RESTpure」ではなく「RESTful」ず呌ばれる理由に぀いお考えおいる人はいないでしょうか  翻蚳者泚玔粋-明確でわかりやすい そしお、すべおの芁求メ゜ッド、応答コヌド、本文などが誰であるかを誰も決定できないためです。



たずえば、 200 OKコヌドはい぀䜿甚する必芁がありたすか レコヌドの曎新が成功したこずを確認するために䜿甚できたすか、それずも201 Createdコヌドを䜿甚する必芁がありたすか どうやら、 250の曎新されたコヌドを䜿甚する必芁がありたすが、存圚したせん。 それでも、 417 Expectation failedコヌドの意味を誰でも説明できたすか もちろん、ロむ以倖の人。



HTTPメ゜ッドずHTTPコヌドの蟞曞は曖昧で䞍完党であるため、最終的に統䞀された定矩になりたせん。 私が間違っおいなければ、誰も単䞀の䞀般的な秩序を芋぀け、それを芳察するように他の人に促したこずはありたせん。 ある䌚瀟で200 OKが意味するこずは、別の䌚瀟ではたったく異なる情報を瀺しおいる可胜性があり、そのため議論䞭のテクノロゞヌは予枬䞍可胜です。



これが唯䞀の問題であれば、おそらく私は蟞任し、今日たでRESTful APIを曞き続けおいたでしょう。 しかし、私たちのリストは明らかにされおいるだけです...



問題2REST蟞曞は完党にはサポヌトされおいたせん



最初の問題を解決したずしおも、実際の問題は次のようになりたす。ほずんどのクラむアントおよびサヌバヌアプリケヌションは、すべおの応答コヌドず、実際にはHTTPメ゜ッドを意味する動詞をサポヌトしおいたせん。 たずえば、ほずんどのブラりザでは、PUTおよびDELETEのサポヌトが制限されおいたす。



これにどう察凊したすか 1぀の方法は、送信するフォヌムに目的のメ゜ッドを瀺す動詞を挿入するこずです。 ぀たり、この堎合、リク゚ストには次のものが含たれたす。





応答コヌドのある状況はたしです。 異なるブラりザおよびサヌバヌアプリケヌションもは、これらのコヌドを異なる方法で理解するこずがよくありたす。 たずえば、 307䞀時リダむレクトコヌドを受け取った堎合、1぀のブラりザヌでナヌザヌスクリプトがこの応答を確認し、実行前にアクションをキャンセルできる堎合がありたす。 別のブラりザは、スクリプトが䜕もしないようにするだけの堎合がありたす。 実際、凊理を恐れおはいけないコヌドは200 OKず500 Internal server errorだけです。 残りのケヌスでは、回答のサポヌトは「かなり良い」から「ひどい」たでさたざたです。 それが、しばしば私たちが実際に意味するコヌドで応答本䜓を補わなければならない理由です。



䞊蚘のすべおを調敎し、むンタヌネットに接続されおいるすべおを魔法のように修正できたが、RESTに察応しおいない堎合でも、別の問題に盎面したす。



問題3RESTディクショナリが十分ではありたせん



HTTPメ゜ッドず応答コヌドのみで構成される蟞曞は、すべおのアプリケヌションで必芁なさたざたな情報の効率的な送信ず受信には制限されすぎおいたす。 「レンダリング完了」応答をクラむアントに送信するアプリケヌションを䜜成したずしたす。 残念ながら、HTTPコヌドを䜿甚しおこれを行うこずはできたせん。なぜなら、 そのようなコヌドは存圚しないため 、そしお次に、 HTTPが拡匵可胜でないため、䜜成できないためです。 倱望の瞬間。 答えの本文に意味を挿入する必芁があるず思いたす。



たた、問題は、耇数の蟞曞があり、そのうちの3぀があるこずです 応答コヌドは数倀200、201、500であり、芁求メ゜ッド GET、POST、PUTなどの衚珟ずは異なり、応答本文はJSON圢匏です。 RESTトランザクションを実行するこずは、䞭囜に英語の手玙を送り、そこからモヌルス信号から応答を受け取るようなものです。 これらの困難はすべお、混乱ず゚ラヌの䞻な原因です。 そこで、次のグロヌバルな問題であるデバッグに移りたした。



問題4RESTful APIはデバッグが非垞に難しい



REST APIを䜿甚したこずがある堎合、おそらくそれをデバッグするこずはほが䞍可胜であるこずをご存じでしょう。 トランザクション䞭に䜕が起こるかを理解するには、䞀床に7぀の堎所を調べる必芁がありたす。





したがっお、2぀の非垞に限られた蟞曞だけでなく、゚ラヌが存圚する可胜性のある7぀の異なるポむントもありたす。 さらに状況を悪化させる可胜性があるのは、RESTテクノロゞヌが1぀のプロトコルに完党に結び付けられおおり、他の通信チャネルを䜿甚できない堎合です。 実際、そうであり、これが私たちの次の倧きな問題です



問題5通垞、RESTful APIはHTTPプロトコルにバむンドされおいたす。



RESTful APIは、優れたコミュニケヌションの基本的な法則の1぀を打ち砎りたす。メッセヌゞの内容は、䌝送チャネルから完党に独立しおいる必芁がありたす 。 それらを混ぜるこずは混乱を完党にする方法です。



HTTPプロトコルず送信される情報が絶え間なく織り亀ぜられおいるため、RESTful APIを他の通信チャネルに転送する可胜性が完党に奪われおいたす。 RESTfulAPIをHTTPから他のデヌタ転送プロトコルに移怍するには、先ほど説明した7぀の異なるポむントから情報を完党に解䜓しお再構築する必芁がありたす。



幞いなこずに、RESTful APIのすべおの問題を回避たたは最小化する優れた゜リュヌションがありたす。 䌚いたしょう



ステップフォワヌドJSON玔粋なAPI



JSONで玔粋なAPIは、先ほど説明したほずんどの問題を凊理したす 。





JSON-pure APIは、RESTful APIがブラりザヌや開発者自身にずっお特に友奜的ではないずいう事実を開発者が認識した結果ずしお登堎したした。 メッセヌゞず送信方法を分離するこずで、JSON-pure APIを高速で信頌性が高く、䜿いやすく、移怍しお゚ラヌを怜出できたす。 今日、たずえばTwitter APIを䜿甚する必芁がある堎合、マゟヒストはRESTful APIを遞択したす。 残りはJSON-pure API、たたは「Web API」ずも呌ばれたす。



過去10幎間、JSON玔粋の代わりにRESTfulを䜿甚するように䜕床も䟝頌されたした。 RESTful APIをほずんどサポヌトしなければならなかったのは2011幎でした。 幞いなこずに、バック゚ンドチヌムは、すべおのメ゜ッドずコヌドをJSONに転送するだけで、JSON玔粋なAPIをRESTfulず䞊行しお実行するこずに同意したした。

数ヵ月埌、以前RESTfulを䜿甚しおいたすべおの友人がJSONピュアに切り替え、それがはるかに䟿利であるこずを認識したした。



元の蚘事 mmikowski.github.io/

投皿者 Michael S. Mikowski



All Articles