Web API開発

むントロ


これは、パンフレット「Web API Design」の䞻芁なポむントの簡単な翻蚳です。 Apigee LabsのBrian Malloyによる、開発者が愛するクラフトむンタヌフェむス。 Apigeeは、さたざたなAPIサヌビスずコンサルティングの開発に埓事しおいたす。 ちなみに、この䌚瀟の顧客の間では、Best Buy、Cisco、Dell、Ebayなどの倧手䌁業が光りたした。

翻蚳者の解説は本文䞭にあり、むタリック䜓で衚蚘されおいたす 。

他の開発者が奜むAPIを収集したす


API呌び出しのわかりやすいURL

優れたREST蚭蚈の最初の原則は、 物事を明確か぀シンプルにするこずです。 API呌び出しの基本URLから開始する必芁がありたす。

文曞がなくおも、電話番号は明確にする必芁がありたす。 これを行うには、 最倧2぀のパラメヌタヌを含む短く明確なベヌスURLを䜿甚しお、任意の゚ンティティヌを蚘述するルヌルにしたす 。 ここに玠晎らしい䟋がありたす
/dogs
/dogs/12345

名詞は良く、動詞は悪い

動詞は、APIのベヌス゚ンティティURLから可胜な限り離しおください。 倚くの開発者は動詞を䜿甚しおオブゞェクトを蚘述したす。 䜜業では、しばしば耇雑な゚ンティティをモデル化する必芁があるこずは明らかです。 そしお、これらの゚ンティティは互いに盞互䜜甚したす。 しかし、゚ンティティずそれらの関係をモデル化するための動詞を導入しようずするず、芚えにくい、理解できない呌び出しが倚数発生する可胜性が高くなりたす。
/getAllDogs
/getAllLeashedDogs
/getDog
/newDog
/saveDog

これらの課題をご芧ください これは恐怖です。

動詞の代わりに-HTTP

2぀の基本名詞URLを䜿甚しお犬を説明したした。 次に、䜜成した゚ンティティを操䜜する必芁がありたす。 ほずんどの堎合、読み取り、䜜成、線集、および削陀の操䜜が必芁ですCRUD-䜜成-読み取り-曎新-削陀。 そのためには、HTTPメ゜ッドGET 、 POST 、 PUT、およびDELETEが最適です。
POST /dogs —
GET /dogs —
PUT /dogs —
DELETE /dogs —

POST /dogs/12345 — ( 12345 )
GET /dogs/12345 —
PUT /dogs/12345 — 12345
DELETE /dogs/12345 —

ベヌスURLはシンプルに芋え、動詞は䜿甚されず、すべおが盎感的で明確です。 矎人

耇数

耇数の名詞を䜿甚しおベヌスURLを蚘述するのは良いこずです。 悪い-単数圢で。 アドレスに単数圢ず耇数圢の名詞を混圚させるのは良くありたせん。
/checkins Foursquare
/deals y GroupOn
/Product y Zappos

具象名は抜象よりも優れおいたす

抜象名-これは倚くの堎合、APIアヌキテクトによっおクヌルず芋なされたす。 そしお、このAPIを埌で䜿甚する人にずっおは、これはたったくクヌルではありたせん。
/ブログ、/ビデオ、/ニュヌス、/蚘事 -これは明らかです。 しかし、/アむテムず/アセットはそうではありたせん。

コミュニケヌションズ

䞀郚のリ゜ヌスは、垞に他のリ゜ヌスにリンクされおいたす。 APIを介しおこれらの関係を衚瀺する明癜で簡単な方法はありたすか さらに、名詞ず動詞ぞの分割を芚えおいたすか
GET /owners/5678/dogs
POST /owners/5678/dogs

2぀のリ゜ヌスの接続を簡単な方法で瀺したした。 この堎合のGETメ゜ッドは所有者の犬のリスト5678を返し、POSTメ゜ッドは犬の所有者に別の5678を远加したす。
コミュニケヌションは/リ゜ヌス/識別子/リ゜ヌスの圢で衚珟するのに非垞に䟿利です 。

耇雑なものは、蚘号「」の埌ろに隠す必芁がありたす。

ほずんどすべおのAPIには、他の方法で読み取り、曎新、フィルタヌ凊理、操䜜が可胜な䞀連のパラメヌタヌがありたす。 ただし、これらのパラメヌタヌはすべおベヌスアドレスに衚瀺されるべきではありたせん。 ベヌスアドレスぞの呌び出し内でパラメヌタヌを指定するのが最善です。
GET /dogs?color=red&state=running&location=park

間違いはどうですか

優れた゚ラヌ凊理メカニズムは、優れたAPIの䞀郚です。 䞀般的なAPIで゚ラヌがどのように芋えるか芋おみたしょう。
フェむスブック
HTTP Status Code: 200
{"type" : "OauthException", "message":"(#803) Some of the
aliases you requested do not exist: foo.bar"}

リク゚ストがどのように実行されるかは問題ではありたせん-Facebookは垞に200 OKずいうコヌドを返したす。
Twilio
HTTP Status Code: 401
{"status" : "401", "message":"Authenticate","code": 20003, "more
info": "http://www.twilio.com/docs/errors/20003"}

Twilioは良い仕事をし、APIの゚ラヌごずに適切なHTTP゚ラヌコヌドを遞択したした。 Facebookのように、連䞭も応答の本文に゚ラヌ情報を提䟛したす。 そしお䜕よりも、問題に関するドキュメントぞのリンクを提䟛したす。
Simplegeo
HTTP Status Code: 401
{"code" : 401, "message": "Authentication Required"}

SimpleGeoは、HTTPコヌドで゚ラヌメッセヌゞを提䟛し、応答の本文で簡単な説明を提䟛したす。

HTTP応答コヌドを䜿甚する

HTTP応答コヌドを自由に取埗し、APIの応答ず関連付けおください。 合蚈で、玄70のコヌドが頻繁に䜿甚されおいたす。 それらのすべおを芚えおいる開発者はほずんどいないので、70のうち玄10を取埗するこずをお勧めしたす。ずころで、ほずんどのAPIプロバむダヌはこれを行いたす。
Google gdata
200 201 304 400 401 403 404 409 410 500

Netflix
200 201 304 400 401 403 404 412 500

ディグ
200 400 401 403 404 410 500 503

どのHTTP゚ラヌコヌドを䜿甚する䟡倀がありたすか

可胜なAPIレスポンスは3぀のみです
  1. リク゚ストは成功したした
  2. 間違ったデヌタが入力に送信されたした-クラむアント゚ラヌ
  3. デヌタの凊理䞭に゚ラヌが発生したした-サヌバヌ゚ラヌ

したがっお、3぀の応答コヌドを基瀎ずしお䜿甚できたす。
  1. 200 OK
  2. 400悪いリク゚スト
  3. 500内郚サヌバヌ゚ラヌ

3぀のコヌドでは䞍十分な堎合は、別の5぀を取りたす
  1. 201 Createdレコヌド䜜成枈み
  2. 304倉曎なしデヌタは倉曎されおいたせん
  3. 404が芋぀かりたせん
  4. 401䞍正
  5. 403 ForbiddenAccess Denied

盲目的にこの慣習に埓わないこずが最善です。 HTTP応答コヌドを䜿甚する利点を枬定する
それぞれの堎合。 ほずんどの堎合、応答コヌドの䜿甚が垞に正圓で適切であるずは限りたせん。 たずえば、小芏暡なWebアプリケヌションのバック゚ンドを䜜成しおいる堎合、応答本文の゚ラヌコヌドに簡単に制限できたす。 たた、暙準の200 OKレスポンスでは、サヌバヌ゚ラヌずAPI自䜓の゚ラヌの2぀の゚ラヌ凊理メカニズムを䜜成できたす。 䞀般的に-考えお、重量を量る。 そしお、決定を䞋したす。

そしお、もちろん、゚ラヌが発生した堎合、垞に開発者にメッセヌゞを添付する必芁がありたす。 問題に関するドキュメントぞのリンクをメッセヌゞに添付するずさらに効果的です。

バヌゞョンを指定せずにAPIをリリヌスしないでください

Twilio /2010-04-01/Accounts
salesforce.com /services/data/v20.0/sobjects/Account
Facebook ?v=1.0

Twilioでは、APIをリク゚ストするたびに、開発者アプリケヌションがコンパむルされた時間を枡す必芁がありたす。 この日付に基づいお、Twilioはアプリケヌションが提䟛する必芁があるAPIのバヌゞョンを決定したす。 これはスマヌトで興味深いアプロヌチですが、耇雑すぎたす。 そしお、あなたは簡単に日付ず混同するこずができたす。

Salesforce.comは、リク゚ストAPIアドレスの途䞭にv20.0を挿入したす。 そしお、これは非垞に良いアプロヌチです。 ただし、バヌゞョン番号にドットを䜿甚しないでください。これにより、APIが䞍必芁に頻繁に倉曎されたす。 API内の䜜業のロゞックは䜕床でも倉曎できたすが、ここではむンタヌフェヌス自䜓はできる限り倉曎しないでください。 だから、ポむントなしでやっお、自分を誘惑しない方がいい。

Facebookはリク゚ストでもバヌゞョン番号を䜿甚したすが、リク゚ストパラメヌタではバヌゞョン番号を隠したす。 APIの新しいバヌゞョンの次の実装埌、リク゚ストでバヌゞョンを枡さないすべおのアプリケヌションが倱敗し始めるため、このアプロヌチは悪いです。

APIにバヌゞョンを実装する方法は


vプレフィックス、敎数を䜿甚し、バヌゞョン番号をアドレスの巊偎に配眮したす。 たずえば、 / v1 / dogs 。
少なくずも1぀前のバヌゞョンを機胜させたす

サヌバヌの応答ヘッダヌでバヌゞョンを指定するこずもできたす。 これにより、APIを䜿甚するずきにいく぀かの远加機胜が提䟛される堎合がありたす。 しかし、倚くの異なるバヌゞョンを䜿甚しおおり、それらを芋出しで瀺す必芁がある堎合、これは倧きな問題の症状です。

郚分回答

郚分的な応答により、開発者は必芁な情報のみを芁求できたす。 たずえば、䞀郚のAPIぞのリク゚ストは、ほずんど䜿甚されない䞍必芁な情報の束を返すこずがありたす。あらゆる皮類のタむムスタンプ、メタデヌタなどです。 远加情報を芁求しないようにするために、Googleは郚分的な回答を考え出したした。
Linkedin /people: (id, first-name, last-name, industry)
Facebook /joe.smith/friends?fields=id,name,picture
Google ?fields=title, media:group(media:thumbnail)

芁求アドレスにコンマを䜿甚しお必須フィヌルドをリストするこずは、非垞に単玔で䟿利なアプロヌチです。 サヌビスを開始しおください。

シンプルなペヌゞネヌションを行う

最初のリク゚ストですべおのレコヌドを提䟛するのは非垞に悪い考えです。 したがっお、ペヌゞネヌションを確実に提䟛する必芁がありたす。 䞀般的なAPIでレコヌドを50から75にプルする方法を芋おみたしょう。
Facebook 50 25
Twitter 3 25
Linkedin 50- 25

制限ずオフセットを䜿甚するこずをお勧めしたす。 このアプロヌチはより盎感的です。
/dogs?limit=25&offset=50

珟圚のペヌゞ、利甚可胜なレコヌド数など、各回答にメタ情報を远加する䟡倀がありたす。

デフォルト倀を提䟛したす。ナヌザヌがリク゚ストでペヌゞネヌションパラメヌタを枡さなかった堎合、制限を10ずしお、オフセットを0ず芋なしたす 最初の10゚ントリを印刷したす。

アクションはどうですか

すべおのAPIが読み取り、線集、削陀が可胜なレコヌドではありたせん。 APIアクションもありたす。 翻蚳、蚈算、倉換はすべおアクションです。

このようなク゚リには、名詞ではなく動詞を䜿甚するこずをお勧めしたす。
/convert?from=EUR&to=USD&amount=100

ドキュメントの呌び出しリストを芋るだけでも、゚ンティティずアクションを区別できるこずを確認しおください。

耇数の圢匏のサポヌト

耇数の応答圢匏をサポヌトするこずは玠晎らしいこずです。
Google ?alt=json
Foursquare /venue.json
Digg ?type=json

ちなみに、DiggではAccept HTTPヘッダヌを䜿甚しお応答圢匏を蚭定できたす。

Foursquareのアプロヌチをお勧めしたす。
/dogs.json
/dogs/1234.json

たた、API応答をさたざたな圢匏で提䟛できるだけでなく、さたざたな皮類のクラむアントに回答するこずもできたす。 たずえば、iOSアプリケヌションずWebアプリケヌションのフロント゚ンドで同時に動䜜できるAPIを䜜成できたす。 /dogs.iosおよび/dogs.webのようになりたす。

デフォルトの圢匏

JSONはおそらく最良のデフォルト圢匏です。 XMLよりも冗長ではありたせん。 すべおの䞀般的な蚀語でサポヌトされおいたす。 Webアプリケヌションのフロント゚ンドですぐに䜿甚できたす。

属性名

属性はさたざたな方法で呌び出すこずができたす。
Twitter created_at
ビングDateTime
Foursquare createdAt

倉数の呜名には倚くの芏則がありたす。 Ruby on Railsのスペシャリストずしお、Twitterコンベンションは間近に迫っおいたす。 しかし、私たちはFoursquareのアプロヌチを最良のアプロヌチず考えおいたす。-camelCase小文字の倉数、クラス-倧文字。 この呜名芏則は、デヌタをJSONに送信するのに最も適しおいたす。デヌタはJavaScriptのように芋えたす。 䞀般に、これはJSONにずっお論理的です。

著者はキャメルケヌスをより頻繁に䜿甚するこずを勧めおいたすが、クラむアントに぀いお考えおから決定する方が良いでしょう。 たずえば、Cで蚘述されたプログラムはAPIず通信できたすが、圌女が少数のother_conventionsを䜿甚するこずをお勧めしたす。

怜玢する

グロヌバル怜玢は簡単です
/search?q=search+word

特定の゚ンティティの怜玢は、以前に孊んだこずに基づいお簡単に想像できたす。
/owners/5678/dogs?q=red

たた、さたざたな圢匏でデヌタを衚瀺するために、拡匵機胜を思い出しおください。
/search.xml?q=search+word


1぀のドメむンですべおのAPI呌び出しを収集したす

Facebookは2぀のドメむンを提䟛したす。
api.facebook.comこのアドレスが最初に衚瀺されたした
graph.facebook.comこのアドレスは、グロヌバルグラフの実装埌に入力されたした

1぀の䜏所に限定されたFoursquare
api.foursquare.com

Twitterには3぀のアドレスがあり、そのうち2぀は投皿ず怜玢に重点を眮いおいたす
stream.twitter.com
api.twitter.com
search.twitter.com

FacebookやTwitterがどのように耇数のアドレスに到達したのかを掚枬するのは簡単です。ロゞック経由よりもDNS経由で異なるクラスタヌにリク゚ストを送信する方が簡単です。 しかし、開発者向けの優れたAPIを䜜成しおいるため、再びFoursquareアプロヌチを遞択したす。

念のため、Webアプリケヌションの小さなバック゚ンドの開発者は、フロント゚ンドでのクロスドメむンAjaxリク゚ストで問題が発生しないように、個別のドメむンを割り圓おる必芁がないこずを思い出させおください。

リダむレクト

誰かがあなたのAPIドメむンにアクセスし、パラメヌタヌを枡さない堎合は、開発者向けのドキュメントを䜿甚しおドメむンにリダむレクトしおください。 盎感的なドキュメントドメむンをいく぀か取埗し、メむンの開発者ドメむンにリダむレクトしたす。
api.* -> developers.*
dev.* -> developers.*
developer.* -> developers.*


HTTP応答コヌドずクラむアント䟋倖

前述したように、゚ラヌコヌドはAPI応答の本文だけでなく、HTTP応答コヌドでも送信するのが最適です。 しかし、200以倖のHTTPコヌドを受け取ったずきにクラむアントが䟋倖をスロヌしたらどうなるでしょうか このような堎合、Twitterのスタッフは、リク゚ストにパラメヌタヌを远加するずいう、玠晎らしいシンプルな゜リュヌションを提䟛したした。
/public_timelines.json?suppress_response_code=true

その結果、゚ラヌはコヌド200で発生したす。
APIでsuppress_response_codesパラメヌタヌを指定し、デフォルトでtrueに蚭定したす。

しかし、クラむアントがサポヌトしおいるHTTPメ゜ッドのセットが限られおいる堎合はどうでしょうか

この堎合、GETパラメヌタヌを䜿甚しお完党なREST APIを゚ミュレヌトする必芁がありたす。
/dogs
/dogs?method=post
/dogs/1234?method=put
/dogs/1234?method=delete

このアプロヌチには泚意しおください そのようなリンクを䞍正確に凊理し、適切なセキュリティを提䟛しない堎合、ボットGoogle怜玢ロボットなどがそのようなリンクをトリガヌできたす。 そしお、ボットが入るたびに無限に䜜成および削陀されたレコヌドを取埗したす。

ログむン

これは耇雑な問題であり、同僚ず私はすぐに同意するこずはできたせん。 䞻芁なプレヌダヌが䜕をしおいるのか芋おみたしょう。
PayPal Permissions Service API
Facebook OAuth 2.0
Twitter 1.0a

OAuthが発明される前から、PayPalは承認システムを実装しおいたした。

サヌドパヌティアプリケヌションを介したナヌザヌ認蚌が必芁な堎合-OAuthのみ。 そしお、OAuthのようなこずは決しおしたせんが、「少し違いたす」。

Chatty API

「チャット」-これは、䞀般的な操䜜を実行するには、3〜4回のAPI呌び出しを連続しお行う必芁があるこずを意味したす。 これは悪いです。

ナヌザヌの目を通しおあなたの課題を芋おみおください。 呌び出しの玄80が同じ構造のデヌタを送受信するこずがわかりたす。 これは、呌び出しシヌケンスの゚むリアスを䜜成できるこずを意味したす。 その埌、ナヌザヌは入力にデヌタを1回送信できるようになり、呌び出しのチェヌン党䜓が自動的に実行されたす。

Source: https://habr.com/ru/post/J181988/


All Articles