[{"data":1,"prerenderedAt":261},["ShallowReactive",2],{"content-\u002Fcontents\u002Fapiapi":3,"surroundPost-\u002Fcontents\u002Fapiapi":252},{"id":4,"title":5,"body":6,"createdAt":240,"description":229,"draft":241,"extension":242,"meta":243,"navigation":244,"path":245,"seo":246,"stem":247,"tags":248,"thumbnail":250,"updatedAt":240,"__hash__":251},"contents\u002Fcontents\u002Fapiapi.md","APIに関するあれこれを調べでみた",{"type":7,"value":8,"toc":228},"minimark",[9,13,16,21,24,27,30,33,47,57,67,70,73,76,81,84,87,90,106,109,112,115,118,125,129,140,143,146,149,153,161,164,167,170],[10,11,12],"p",{},"API を作成する機会があり、これまでなんとなく使っていた API に関してしっかり言語化します。",[10,14,15],{},"API に関しての文献は書籍や Web にも大量にあるため、そちらを参考にしつつ、パクリにならないよう書いたつもりです。",[17,18,20],"h2",{"id":19},"api-とは","API とは",[10,22,23],{},"単純に書くなら Application Program Interface の略。",[10,25,26],{},"実際に私たちが普段接しているのは Web API と呼ばれるもの。",[10,28,29],{},"もともとは OS とアプリケーションの通信に使われていたことから、現在の Web を介して用いられる API は Web API と呼ばれる。",[10,31,32],{},"この Web API の意味するところをいくつかの参考文献から引用してみた。",[34,35,36],"blockquote",{},[10,37,38,39,42,43],{},"アプリケーション・ソフトウェアを構築および統合するための一連の定義とプロトコル",[40,41],"br",{},"\n出典：",[44,45,46],"span",{},"1",[34,48,49],{},[10,50,51,52,42,54],{},"あるソフトウェアから他のソフトウェアを制御するインターフェース（規約）",[40,53],{},[44,55,56],{},"2",[34,58,59],{},[10,60,61,62,42,64],{},"HTTP プロトコルでやりとりするアプリケーション間のインターフェース",[40,63],{},[44,65,66],{},"3",[10,68,69],{},"つまり、アプリケーション（ソフトウェア）間でやりとりするための入り口と出口のルールのことを指している。",[10,71,72],{},"API 連携といった場合、暗黙的にエンドポイントがあって、そこに HTTP プロトコルでリクエストを送り、レスポンスを受け取るといった一連の操作が連想される。",[10,74,75],{},"このように API は Web でデータをやり取りする上での共通のインターフェースと言える。",[77,78,80],"h3",{"id":79},"rest-api-とは","REST API とは",[10,82,83],{},"REST とは（Representational State Transfer）のこと。もう少し具体的にいうと、REST は API 設計時の原則のようなものです。",[10,85,86],{},"「ようなもの」と曖昧な表現にしたのは REST API と呼ばれているものが必ずしも REST の原則に従っているわけではないからです。",[10,88,89],{},"じゃあどんなものが REST の特徴かというと以下に示す 4 つの内容が挙げられます。（※ 原著論文では 6 つらしいので厳密ではないです）",[91,92,93,97,100,103],"ul",{},[94,95,96],"li",{},"クライアントとサーバ側のやり取りがステートレスであること",[94,98,99],{},"一意のリソースを指す指す URL",[94,101,102],{},"統一されたインターフェース（HTTP プロトコル、メソッド）",[94,104,105],{},"JSON や XML などを用いた情報と状態遷移を行うことができる",[17,107,108],{"id":108},"設計時に気をつけること",[10,110,111],{},"まずは可視性です。要は API をパブリックで使うのかプライベートで使うのかです。",[10,113,114],{},"パブリックにする場合は認証認可方法とアクセス数増加による負荷を検討する必要があります。",[10,116,117],{},"プライベートで扱う場合は、認証なしでも大丈夫でしょう。パブリックにする必要がないものはネットワークに閉じたほうが開発は楽です。",[10,119,120,121,124],{},"あとはもうちょっと実装よりの話だと",[44,122,123],{},"6","の記事がめちゃめちゃ参考になります。",[17,126,128],{"id":127},"swagger-と-openapi-とは","Swagger と OpenAPI とは",[10,130,131,132,139],{},"これに関しては Swagger の公式サイトに",[133,134,138],"a",{"href":135,"rel":136},"https:\u002F\u002Fswagger.io\u002Fblog\u002Fapi-strategy\u002Fdifference-between-swagger-and-openapi\u002F",[137],"nofollow","What Is the Difference Between Swagger and OpenAPI?","という記事に記載がありました。",[10,141,142],{},"内容を自分なりに解釈すると OpenAPI とは OpenAPI Specification のことを指し、REST API を構築するためのインターフェースの仕様を定義したものです。\nそして、Swagger とは OpenAPI の仕様に従った実装を行うためのツール群を指します。",[10,144,145],{},"Swagger のツールとは具体的に、Swagger Editor、Swagger Codegen などがあります。",[10,147,148],{},"これらのツールを使うことで、OpenAPI 準拠のドキュメント作成や API サーバのスタブなどが使えるようになります。",[17,150,152],{"id":151},"oauth-とは","OAuth とは",[10,154,155,156,160],{},"ざっくりいうとサードパーティアプリに対してデータのアクセスを許可する",[157,158,159],"strong",{},"認可","の仕組み（フレームワーク）です。",[10,162,163],{},"OAuth は Web API を調べてるとよく出てくるワードです。",[10,165,166],{},"なぜよく出てくるのかというと、Web API を用いてアプリやシステム間でデータのやり取りを行う際の、認可の仕組みとして登場するからです。",[17,168,169],{"id":169},"参考",[91,171,172,181,190,199,209,219],{},[94,173,174,176,177],{},[44,175,46],{},"：",[133,178,20],{"href":179,"rel":180},"https:\u002F\u002Fwww.redhat.com\u002Fja\u002Ftopics\u002Fapi\u002Fwhat-are-application-programming-interfaces#%E6%A6%82%E8%A6%81",[137],[94,182,183,176,185],{},[44,184,56],{},[133,186,189],{"href":187,"rel":188},"https:\u002F\u002Famzn.to\u002F35WrZwt",[137],"絵で見てわかるクラウドインフラと API の仕組み",[94,191,192,176,194],{},[44,193,66],{},[133,195,198],{"href":196,"rel":197},"https:\u002F\u002Famzn.to\u002F37fJSqo",[137],"Software Design 2021 年 2 月号",[94,200,201,176,204],{},[44,202,203],{},"4",[133,205,208],{"href":206,"rel":207},"https:\u002F\u002Famzn.to\u002F3w1aTbv",[137],"WEB+DB PRESS vol.122",[94,210,211,176,214],{},[44,212,213],{},"5",[133,215,218],{"href":216,"rel":217},"https:\u002F\u002Fja.wikipedia.org\u002Fwiki\u002FRepresentational_State_Transfer",[137],"Representational State Transfer",[94,220,221,176,223],{},[44,222,123],{},[133,224,227],{"href":225,"rel":226},"https:\u002F\u002Fqiita.com\u002Fbaby-degu\u002Fitems\u002F6f516189445d98ddbb7d",[137],"API 設計スキルを次のレベルに引き上げるベストプラクティス 22 選",{"title":229,"searchDepth":230,"depth":230,"links":231},"",2,[232,236,237,238,239],{"id":19,"depth":230,"text":20,"children":233},[234],{"id":79,"depth":235,"text":80},3,{"id":108,"depth":230,"text":108},{"id":127,"depth":230,"text":128},{"id":151,"depth":230,"text":152},{"id":169,"depth":230,"text":169},"2022-03-12",false,"md",{},true,"\u002Fcontents\u002Fapiapi",{"title":5,"description":229},"contents\u002Fapiapi",[249],"2022","\u002Fimg\u002Ftwitter-card.png","SGYD_w94DW2PtGwNP_8J6-tfGegdTd3X2avvneN2nCE",[253,257],{"title":254,"path":255,"stem":256,"children":-1},"Always-On Agents: A Survey of Persistent Memory, State, and Governance in LLM Agents","\u002Fcontents\u002Falways-on-agents-persistent-state-governance","contents\u002Falways-on-agents-persistent-state-governance",{"title":258,"path":259,"stem":260,"children":-1},"AREX: Towards a Recursively Self-Improving Agent for Deep Research","\u002Fcontents\u002Farex-recursive-deep-research","contents\u002Farex-recursive-deep-research",1784936717380]