NTTドコモビゞネスのブログ - TECH PLAY

TECH PLAY

NTTドコモビゞネス

NTTドコモビゞネス の技術ブログ

å…š641ä»¶

䌁業間におけるAPI利甚が拡倧しおいくず、API自䜓が利益を生み出すAPI゚コノミヌが広がっおいきたす。 API゚コノミヌ自䜓に぀いおは以前蚘事にしおいたす が、その䞭で考えるべき芖点がサヌビスのAPI化です。 より耇雑な凊理をRESTfulで凊理する 単玔なデヌタベヌス構造やモデルの公開はRESTfulによっお凊理を行えたす。RESTfulは開発者にずっお分かりやすく、䜿い勝手の良いAPIフォヌマットになりたすが、幟぀かの問題点がありたす。その䞀぀がクラむアント偎利甚偎のコヌド量が増倧するこずです。 単玔なモデル操䜜だけをRESTfulで公開しおいる堎合、耇数のモデルを連携させるような操䜜を実珟するにはAPIを利甚する偎のコヌド量が増えがちです。䟋えばカレンダヌに顧客ずの打ち合わせを远加する堎合、RESTfulで考えるず次のようになりたす。 顧客APIに察しお顧客の存圚確認を行うGET デヌタがなければ䜜成を行うPOST カレンダヌAPIを䜿っお日付が空いおいるか確認するGET 空いおいれば顧客ず自分の情報を合わせおスケゞュヌルを登録するPOST このロゞックはすべおクラむアント偎で行わなければなりたせん。さらに4のスケゞュヌル登録自䜓は顧客デヌタを取埗しおいなくおも実行できおしたうため、䜜り手によっおデヌタ構造が倉わっおきおしたう可胜性がありたす。 サヌビスのAPI化を考える際には、これらの凊理をある皋床パックにし、䞀぀のAPIずしお公開するのが良いでしょう。必ず螏たなければならないステップがあるならば、それはクラむアントではなくサヌバ偎で凊理する方が効率的です。 RESTfulではネットワヌク通信量が増える 先ほどの䟋においおも4回のネットワヌク通信が発生したす。ネットワヌク通信はどこで゚ラヌが発生するか分からないため、なるべく少ない回数で終わらせる方が効果的です。システム連携が前提のAPIではコネクション数増倧によるリ゜ヌス欠乏にもなりやすく、その意味でもコネクション数は少ないに越したこずはありたせん。 ネットワヌク数を枛らす方法ずしお、バッチ凊理で耇数の凊理を䞀回で送れるようにするものもありたす。しかしこの堎合、顧客の存圚確認を行った䞊でデヌタの䜜成を刀断するず蚀った条件凊理は困難です。結局、必芁なデヌタを集めお刀定を行っおAPIをコヌルするずいうステップは倉わりたせん。 通信を枛らすための方法ずしお、怜玢しおデヌタがなければ䜜成しお返すずいったようなAPIを甚意する方法が考えられたす。よくある凊理に぀いお䞀぀にたずめおしたうこずでクラむアント偎、サヌバ偎の凊理䞡方を枛らすこずができるでしょう。 たた、内郚のメ゜ッドを呌び出すのもお勧めです。この時、HTTPを経由しお呌び出すのはよくありたせん。コネクション数が増えおしたうからです。ただしマむクロサヌビスによっおシステムを疎結合にしおいる堎合はうたくいかない可胜性がありたす。 RESTfulはトランザクションに匱い RESTfulの匱点ずしおトランザクションがありたす。業務システムにおいお途䞭で゚ラヌが起こった時のロヌルバック凊理は必ず求められるのですが、RESTfulではうたく実装するのが困難でしょう。これはHTTPの仕組み䞊、䞀回䞀回のコネクションで閉じおしたうず蚀う問題にも関係しおいたす。 䞀床にデヌタをすべお受け取れれば、サヌバ内郚ではトランザクションを䜿った凊理が可胜になりたす。特に䌁業間におけるAPI掻甚においおはトランザクションを意識した蚭蚈が必芁になるでしょう。 RESTfulずいうずデヌタベヌスのテヌブルはモデル単䜍での操䜜が思い浮かびたすが、モデルの操䜜だけで枈むケヌスは倚くありたせん。開発者がそのAPIを䜿っお䜕を実装するのかを意識し、圌らにずっお䜿いやすい圢で公開する必芁がありたす。 デヌタベヌスではなく、利甚する機胜やサヌビスず蚀った単䜍でRESTfulなAPIを䜜るず䜿いやすいでしょう。
APIは䞀般的にプル型の技術です。クラむアント偎からアクセスがあるたでは埅ちの状態になりたす。クラむアント偎から芋おも、サヌバ内郚でどのデヌタが曎新されおいるのかはアクセスしおみるたで分かりたせん。この手の問題で厄介になるのが「どのデヌタが削陀されたのか」が確認しづらいずいうこずです。すべおのデヌタを芋た䞊で、抜け萜ちおいれば削陀されたずいった確認方法であったり、凊理の履歎を芋お刀断するず蚀った方法になっおしたいたす。 そこでサヌバ偎からでもデヌタの曎新を䌝えられる方法を䜿っお、クラむアントずのコミュニケヌションに圹立おおみたしょう。 WebSocket WebSocketはHTML5仕様の䞀郚ずしお定矩されおいたしたが、珟圚は本䜓ずは切り離されおいたす。WebSocketはいわゆるPubSubな圢で、クラむアントがサヌバ偎のメッセヌゞを賌読Subscribeしたす。サヌバは誰が賌読しおいるかは気にせず、発信Publishするだけです。ずは蚀え、賌読盞手に察しおきちんず届くように、たたは届かなくおも良いず蚀った品質管理もできるようになっおいたす。 HTML5の䞭で生たれたので仕組みずしおはWebブラりザを察象にしおいたすが、各皮プログラミング蚀語向けに賌読/発信できるラむブラリが存圚したす。ws://、たたはwss://SSL/TLS版ではじたる専甚のプロトコルを利甚したす。 IoT分野であれば䌌たような仕組みにMQTTがありたす。こちらはヘッダのデヌタ量が小さいずいう特城がありたす。プロトコルはmqtt/mqttsずいった独自のものになりたす。 WebRTC WebRTCはP2Pなメッセヌゞプロトコルになりたす。動画や音声を流すこずもできるので、動画チャットや音声チャットに䜿われるこずが倚いようです。最初のコネクション情報を亀換する際にはSTUNサヌバを介したすが、実際のデヌタ送受信はP2Pにお実行されたす。 基本的にクラむアント同士のメッセヌゞ送受信に぀いお行われたすので、APIには向かないかも知れたせん。ずは蚀え、リアルタむムにデヌタの送受信ができるプロトコルなので、掻甚法はあるでしょう。 WebHooks WebHooksはサヌバに察しおあらかじめURLを登録しおおき、サヌバ偎で䜕かむベントがあった時に通知しおもらう仕組みです。クラむアントが通知しお欲しいURLを登録するので、セキュリティに぀いおはあたり考慮されるこずはないようです。 HTTP/HTTPSを䜿うので他の仕組みに比べるず手軜です。ただしサヌバ偎の負荷は高くなる傟向がありたす。通知を受け取る偎はむンタヌネット䞊に公開されおいる必芁があり、開発時は若干手間がかかりたす。 Webサむトプッシュ スマヌトフォンではよく知られおいるプッシュ通知の仕組みをWebブラりザで実珟できるのがWebサむトプッシュです。ただGoogle ChromeやFirefoxなど限られたブラりザのみ実珟できたす。 サヌバ偎では察象になるWebブラりザのトヌクンを保持しおおく必芁がありたす。そのトヌクンを指定しおメッセヌゞを送信したす。プログラム向けにJSONデヌタをPayloadずしお送るこずもできたす。 APIをサヌバ間でリアルタむムに送受信するために䜿うのであれば、珟時点ではWebSocketたたはWebHooksを䜿うのが良さそうです。Webブラりザずの接続であれば、WebSocketたたはWebサむトプッシュになるでしょう。なお、リアルタむム通信系はRESTfulのようにデファクトスタンダヌドず蚀える圢匏が決たっおいないため、サヌビスごずに送受信されるデヌタフォヌマットが異なっおいたすそれでもJSONを䜿うケヌスが倚いですが。導入する堎合には䞀貫した蚭蚈になるように泚意が必芁でしょう。
マむクロサヌビス システムをごく小さくたずめ、APIベヌスで機胜を提䟛するマむクロサヌビスがより広がっおいくず考えられたす。倚くのモノリシックなシステムにおいお密結合が拡匵性やメンテナンス性においお負の資産ずなっおいたす。マむクロサヌビス化するこずで結合ポむントを枛らし、開発を容易にしたす。 マむクロサヌビスは倚くがモデルデヌタのCRUD操䜜をREST APIにお提䟛したす。HTMLを返すものは倚くありたせん。たさにAPI向けの斜策ず蚀えるでしょう。ただし、サヌビスの分け方をうたくやらないず、ただシステムが现分化されただけで耇雑なシステム構成になっおしたいたす。 最近ではマむクロサヌビス甚のフレヌムワヌクも登堎し、開発がより簡単になっおいたす。次の段階ずしおはアヌキテクチャであったり、サヌビスの切り分け方に関する゜リュヌションが共有される幎になっおいくこずでしょう。 Swagger 昚幎できたOpenAPI InitiativeによっおSwaggerは䞀瀟の情報からオヌプン゜ヌスぞ、そしお業界のデファクトスタンダヌドぞ成長しようずしおいたす。APIのドキュメント蚘法に぀いおは他にも幟぀かありたすが、SwaggerおよびOpenAPIが最も倧きなシェアを取るず思われたす。 ただし珟状のバヌゞョン2ず、新しいバヌゞョン3は党く構造が倉わるこずが決たっおいたすので、これたでに䜜成したツヌルは察応が迫られるでしょう。ドキュメントに぀いおはコンバヌタヌが甚意される予定ずなっおいたす。バヌゞョン3は今幎䞭にリリヌスされる予定です。 暙準フォヌマットができあがるこずで、呚蟺ツヌルも䜜りやすくなりたす。これたでにもドキュメント、モックサヌバ、テストなど倚くのラむブラリがありたしたが、さらに利甚範囲が広がっおいくものず思われたす。 APIマネヌゞメント 倚くのAPIはサヌビスに玐付いお䜜成されたす。そのため、各サヌビス責任者のやり方であったり、開発するタむミングでトレンドが倉わっおいるこずがありたす。そうしたフォヌマットの䞍統䞀感は利甚者を混乱させたり、重耇した開発を必芁ずしたりしたす。 そういった問題を解決するためにAPIマネゞメントを導入する䌁業が増えおいたす。APIマネゞメントを導入するこずでセキュリティ、負荷察策、むンタフェヌスの統䞀、ログ管理などずいった機胜が䞀元管理できるようになりたす。 APIのむンタフェヌスを倉えるのは困難です。そのため、恒久的に䜿えるような明確な基準をもっお蚭蚈に取り組む必芁があるでしょう。APIマネゞメントの倚くはそうした基準をあらかじめ備えおおり、利甚者にずっお分かりやすいAPIが開発できるようになっおいたす。 内郚APIの増加 BtoBにおいおは䌁業間のみで提䟛されるAPIが存圚したす。これらのAPIは契玄した䌁業だけに公開されるもので、ドキュメントなども非公開になっおいたす。しかし、倚くのAPI関連ツヌルは公開前提に䜜られおいるものがありたす。䞀般的なプログラミング蚀語においおメ゜ッドの公開、非公開が指定できるのず同様に、APIにおいおも公開、非公開が蚭定できるようになっおいくでしょう。 内郚APIの増加は䌁業間におけるAPIトランザクションの増加に぀ながるので決しお悪い兆候ではありたせん。ただし、䌁業が連携先を探す際にAPI情報が芋぀からないのは問題があるため、䜕らかのドキュメントは䞀般公開されるべきでしょう。 ハヌドりェア連携型APIの増加 数幎前からIoTが䞀぀のキヌワヌドになっおいたすが、倚くの䌁業がハヌドを買っお、そこからネットワヌクぞの繋ぎ蟌みを自分たちで開発しおいたす。それらはずおもリ゜ヌスのかかる䜜業であり、最近ではクラりドサヌビスず自動連携するIoTデバむスが登堎しおいたす。 デバむスがネットワヌクを備えおいる堎合はMQTTたたはWebSocketのようなプロトコル、堎合によっおはREST APIをコヌルする仕組みになっおいたす。デバむスの蚭定さえ行えばすぐにネットワヌク䞊にデヌタが䞊げられるので、開発がずおも効率化したす。 IoT向けにクラりドサヌビスを開発しおいる䌁業においおは、デバむス䌁業ず組んだ䞊でサヌビスの提䟛が求められおいくでしょう。 HTTP゚ラヌ衚珟の統䞀 2016幎03月に出た RFC 7807 - Problem Details for HTTP APIs が参考になりたす。この䞭ではapplication/problem+json たたは application/problem+xml ずいうレスポンスヘッダヌが提案されおいたす。これたでREST APIではHTTPステヌタスを䜿っお゚ラヌ衚珟を行ったり、独自の゚ラヌオブゞェクトを返したりしおいたしたが、これを統䞀しおいこうずいう動きです。 返华する内容ですが、䟋えばJSONの堎合は次のようになりたす。 { "type": "https://example.com/probs/out-of-credit", "title": "You do not have enough credit.", "detail": "Your current balance is 30, but that costs 50.", "instance": "/account/12345/msgs/abc", "balance": 30, "accounts": [ "/account/12345", "/account/67890" ] } こうしたJSONずHTTPステヌタスを合わせお゚ラヌを衚珟しおいきたす。 䌁業におけるAPI利甚、公開が埐々に進んできおいたす。2017幎もたた、提携であったり自瀟システム同士の連携にAPIを利甚するず蚀ったケヌスも増えおいくこずでしょう。
最近のAPIではJSONをリク゚スト/レスポンスフォヌマットずしお採甚するこずが倚いですが、サむズが決しお小さくないこずやパヌスにかかる時間などを気にするケヌスもありたす。そこで考えおみたいのがシリアラズされたフォヌマットであったり、他のフォヌマットです。今回はそんなフォヌマット䟋を玹介したす。 JSON RESTful APIで最も倚いファむルフォヌマットではないかず思いたす。JavaScriptのオブゞェクトフォヌマットですが、倚くのプログラミング蚀語でパヌスしたり、生成できるようになっおいたす。それだけシンプルなフォヌマットであるず蚀えたす。 冗長性はあたりありたせんが、JavaScript特有の波かっこの倚さやダブルクォヌトに囲みなどはあたり奜たれない郚分ず蚀えたす。 google/protobuf: Protocol Buffers - Google's data interchange format Googleが開発しおいるフォヌマットです。XMLより3〜10倍小さく、パヌスは20〜100倍高速であるずしおいたす。あらかじめプロトコル定矩ファむルを䜜成し、コンパむルするこずで倚くのプログラミング蚀語に察応したコヌドが生成されたす。 MessagePack: It's like JSON. but fast and small. JSONず䌌おいるわけではありたせんが、サむズに぀いおは察JSONずしお匷く意識しおいるようです。JSONから䞍芁な郚分を削り取ったこずで、サむズは倧幅に枛っおいたす。察応しおいるラむブラリも倚いのですが、人による可読性が䜎いのが難点ず蚀えるかも知れたせん。 Welcome to Apache Avro! Java、Python、C、C++、C#などで䜿えるデヌタのシリアラズフォヌマットになりたす。プログラミング蚀語が限られおしたいたすが、゚ンタヌプラむズな䌁業システムであれば採甚できる可胜性がありそうです。スキヌマはJSONで定矩したす。 The Official YAML Web Site 人が読みやすいずいう点を重芖したフォヌマットです。非垞に倚くのプログラミング蚀語でサポヌトされおいたすが、APIのフォヌマットよりも蚭定ファむルのフォヌマットずしお採甚されるこずが倚いようです。 Extensible Markup Language - Wikipedia いわゆるXMLのこずです。Webサヌビスの頃に最も䜿われたフォヌマットです。閉じタグで囲むずいうのが冗長的で面倒ずいうのが悩みのタネでした。䌁業間でも䜿えるように怜蚌する仕組みなどもあらかじめ甚意されおいる点が利点です。 倚くの堎合、XMLを解釈するラむブラリはそのコヌドが独特なものになりがちです。JSONのようにハッシュや連想配列、Dictionaryになるわけではありたせん。 シリアラズされたフォヌマットは人が読むこずはほが想定されおいたせん。そのためプログラミング蚀語同士の䞭でしか䜿われたせんがサむズが小さかったり、高速に凊理ができるようになりたす。サヌビスの芏暡や利甚想定によっお採甚を考えおみおも良いでしょう。
これたでサポヌトや問い合わせに寄せられるメッセヌゞは人の目で芋お、その意味を解釈した䞊でデヌタベヌスに構造化しお登録されおいたした。しかし䜕癟、䜕千ずある文章を読むのは倧倉なこずです。 それらを機械で凊理できる可胜性を持っおいるのが自然蚀語分析です。機械孊習モデルをベヌスにするこずでテキストの構造はもちろん、意味も分析できるようになっおきおいたす。 Cloud Natural Language API  |  Google Cloud Platform Googleが提䟛する自然蚀語分析APIです。非構造化テキストの䞭から堎所や人の情報を取り出したり、感情を抜出するこずもできたす。他のAPIず合わせるこずで音声デヌタを分析したり、手曞き文曞からデヌタを読み取るこずもできたす。 IBM - Natural Language Classifier 自然蚀語分類 | Watson Developer Cloud - Japan IBMが提䟛する自然蚀語分類APIです。テキストの背埌にある意図を解釈し、あらかじめ甚意しおいるカテゎリのどれにマッチするのかを分類分けできたす。クラスタリングの高性胜版ず蚀えたす。 解説・事䟋 | docomo Developer support | NTTドコモ RESTfulにテキスト情報を分類分けできたす。そしおもう䞀぀䞀般的にセンシティブず呌ばれる蚀葉を分析し、テキスト内容が危険の高いカテゎリにどれくらい近いかを分析できたす。 テキスト分析 - Cognitive Services | Microsoft Azure Azureで提䟛される蚀語凊理APIです。英語のテキストを分析し、自瀟ブランドに察する評䟡を刀断できたす。さらに重芁なフレヌズを抜出したり、トピック怜出、蚀語刀定が可胜です。 Conversational User Experience Platform for products and services - API.AI 䞎えられたテキストからアクション、名前、人、日付などをJSONで取埗できたす。それによっおテキストが䜕を目的ずしおいるかが刀断できるようになりたす。英語のみサポヌトしおいたす。 非構造化テキストから意味を芋いだすずいうのはずおも困難です。テキストを分析する分かち曞きのような凊理は分類分けはできたすが、その奥にある意図たでは読み取れたせんでした。自然蚀語分析APIを䜿うこずでメヌルやチャットなどのテキストも自動的に分析し、適切な察応が行えるようになるでしょう。
デヌタを可芖化する方法ずしおグラフやチャヌトが甚いられたす。ナヌザにずっおはメリットがある反面、開発者ずしおはグラフを出力するのはそう簡単ではありたせん。画像ラむブラリを入れたり、JavaScriptのグラフラむブラリに合わせたデヌタ出力が求められたす。 そこで今回はグラフを簡単に䜜成できるAPIベヌスのグラフサヌビスを玹介したす。 Charts  |  Google Developers Googleの提䟛するグラフサヌビスGoogle Chartsです。カスタマむズも容易で、グラフは画像の他SVGでの出力もできたす。刻々ず曎新されるデヌタに合わせたリアルタむムグラフも䜜成できたす。 Charts  |  Google Developers HeartRails Graph | キュヌトな円グラフ簡単䜜成サヌビス HeartRailsが提䟛する円グラフ䜜成サヌビスです。項目ず割合を蚭定するだけでグラフが䜜成できたす。べ぀やくメ゜ッドず呌ばれるグラフを暡しおおり、フォントも可愛らしいものが採甚されおいたす。 HeartRails Graph | キュヌトな円グラフ簡単䜜成サヌビス rurihabachi.com - Web API - Function(x) Graph 関数グラフを描くためのサヌビスです。実デヌタではなく、関数を䞎えるずグラフが衚瀺されたす。 rurihabachi.com - Web API - Function(x) Graph ChartBlocks Charting API デヌタセットを適甚しおグラフを生成したす。グラフはSVG/PNG/JPEG/PDFずいったフォヌマットで出力できたす。デヌタのアップロヌドリアルタむムデヌタ含め、グラフのカスタマむズもAPI経由でできたす。 ChartBlocks Charting API APIを䜿うこずでサヌバ偎でラむブラリをむンストヌルしたり、JavaScriptで凊理するず蚀ったコヌドが䞍芁になりたす。手元にデヌタがあるならばこれらのAPIを䜿えばすぐにビゞュアル化が実珟するでしょう。
APIは倖郚リ゜ヌスからデヌタを取埗しお他のデヌタず合わせお自分たちのサヌビスに付加䟡倀を远加できたすが、同じように倖郚からデヌタを取埗する手法ずしおスクレむピングが知られおいたす。今回はスクレむピングずAPIの違いを玹介したす。 スクレむピングずは スクレむピングはサヌバサむドのプログラミング蚀語を䜿っお倖郚サヌバぞアクセスし、そのコンテンツから自分たちの欲しい情報を匕き出す手法です。倚くはHTMLを返す堎合に䜿われ、DOMを解析したり正芏衚珟を䜿っおデヌタを抜き出したす。 スクレむピングはサヌビスが認めおいない方法 APIはサヌビス提䟛偎が䞀定の条件を蚭けた䞊で公開しおいる開発者向けの機胜になりたす。察しおスクレむピングは本来はナヌザ向けであるHTMLコンテンツをコンピュヌタに解析されるもので、公匏にサポヌトされおいるものではありたせん。 そのためコンピュヌタによっお負荷を高めたり、蚱容されおいないアクセスを行うず䞍正アクセス防止法違反によっお凊眰される可胜性もありたす。 なぜスクレむピングをするのか 最も倧きな理由ずしおアクセス先のサヌビスがAPIを提䟛しおいないずいう問題がありたす。APIがあるならばそれを䜿いたいず考えるでしょうが、APIがないためにスクレむピングに頌らざるを埗ないず蚀えるでしょう。たた、APIが公開されおいたずしおも必芁な情報がスクレむピングしなければ取埗できないず蚀ったケヌスもありたす。 コンテンツは䌁業にずっお生呜線である堎合も倚く、それらのデヌタをたずめお抜かれおデヌタベヌス化されるこずを懞念する声もありたす。 スクレむピングのデメリット スクレむピングはHTMLコンテンツの圢匏に巊右されたす。そのためデザむンが倉わるずデヌタがうたく取れなくなる可胜性がありたす。その堎合、再床スクレむピングの䜜成し盎しになりたすが、倧幅にデザむンが倉わったりURLの階局が倉わったりするケヌスもありたす実際にはSEOぞの圱響があるのでURLは倉わらないこずのが倚いでしょう。 たた、サヌビス提䟛偎でログを解析しおいる堎合、怪しい動きをするログを確認するずアクセス拒吊される可胜性がありたす。Googleなどシステムが匷固なサヌビスはすぐに匟かれる可胜性があり、その結果ずしおスクレむピング以倖でのサヌビス利甚においおも圱響を受けるこずになりたす。 さらに認蚌埌のデヌタを取埗するようなスクレむピングはサヌバ偎にID、パスワヌドなどを保存しなければなりたせん。これは利甚者にずっお倧きなセキュリティリスクになるこずでしょう。 スクレむピングを防止するには スクレむピングはAPIが提䟛されおいれば防げる行為です。スクレむピングは、それをしなければならないほど、コンテンツに魅力があるずいう蚌拠ずも蚀えたす。であれば公匏ずしおきちんずアクセスコントロヌルした䞊でコンテンツをAPI提䟛する方が健党ず蚀えるのではないでしょうか。 スクレむピングはむタチごっこになりがちで、防げるものではありたせん。そしお開発者の䞍甚意なコヌドによっおサヌビス提䟛偎が圱響を受けたり、サヌビス利甚者が迷惑を被るこずになるでしょう。そうならないためにAPIを公開するずいうのは倧切なこずです。 スクレむピングの䟋 最近ではアプリやWebサヌビスで自分の資産管理を行う系統のサヌビスにおいお、各金融機関、クレゞットカヌドのサむトぞスクレむピングを行っおいるケヌスがありたす。金融機関のID、パスワヌドを登録しなければならず、䞇䞀挏掩などが起こった時には倧きな損害に぀ながる可胜性がありたす。 理想的には各金融機関がOAuth2ベヌスのAPIを公開し、適切なアクセスコントロヌルを実珟できる仕組みを甚意するのが䞀番でしょう。
倚くのAPIが認蚌情報ずずもに実行されたす。実行ナヌザを特定する目的の堎合もあれば、APIキヌのような情報を䜿っおコヌル数をカりントする目的で䜿うこずもありたす。 今回はそんなAPIにおける認蚌情報をAPI䞭のどこに持たせるのが良いか、玹介したす。 URLパラメヌタ URLのパラメヌタずしお持たせる堎合はセッションキヌやトヌクン文字列であるこずが倚いです。もう䞀぀のパラメヌタアプリケヌションキヌなどず合わせお、認蚌が正しいこずを怜蚌するようになっおいたす。 トヌクン文字列は䞀定期間で切れる仕組みになっおおり、有効期限が過ぎた埌はリフレッシュしお新しいトヌクン文字列を取埗し盎したす。 URLの堎合、Webブラりザからの怜蚌がしやすいのがメリットです。単玔にURLをブラりザで開いお結果が返っおくればパラメヌタが正しいかどうかが確認できたす。 HTTPヘッダヌ HTTPヘッダヌに認蚌キヌを埋め蟌む方法もよく芋られたす。Webブラりザからの確認は若干難しくなりたすが、Ajaxのような仕組みを䜿えばヘッダヌに文字列は簡単に远加できたす。 ク゚リヌ文字列はどういった操䜜を行うか指定するものずし、ヘッダヌは認蚌などシステムのスコヌプを分けるのは開発者にずっお分かりやすい区分けかも知れたせん。 セッション、クッキヌ あたりお勧めしたせんがセッションやクッキヌに認蚌情報を持たせるこずがありたす。スマヌトフォンアプリなどで、非公開な自瀟アプリ限定で䜿っおいるAPIの堎合、このようなケヌスがありたす。 利点ずしおは既存のWebサヌビスず同じ仕組みで䜿いたわせるずいう点が挙げられたす。Webサヌビスでは認蚌情報をURLに茉せたりしたせん。ヘッダヌにするずWebブラりザからは利甚できなくなりたす。 WebサヌビスずAPIは分けお提䟛する方が良いのですが、Webサヌビス偎で認蚌を通っおいるにも関わらずAPI偎の認蚌が通っおいないず刀断されるのはナヌザビリティが良くありたせん。そのため、セッションキヌを利甚するケヌスも少なからず存圚したす。 お勧めな方法は OAuth2ではURLに認蚌トヌクンを远加する方法になっおいたす。実装ずしおは䞀番手軜ず蚀えるかも知れたせん。次にヘッダヌぞの远加が良いでしょう。セッションを甚いるのはよほどのこずがない限り避けるのが良いでしょう。 Webサヌビスずの連携に぀いおいえば、セッションの認蚌キヌずAPIの認蚌トヌクンずを亀換するAPIを甚意するのが良さそうです。たず、そこにアクセスするこずでAPIアクセスに䜿える認蚌トヌクンが手に入りたす。その埌からのアクセスは認蚌トヌクンを䜿えば良いのです。認蚌トヌクンはオンメモリに保存し、別なURLに移動した際には再床亀換すれば良いでしょう。認蚌トヌクンは重芁な情報なのでlocalStorageに保存するのは避けた方が良いでしょう。 認蚌トヌクンは定期的にアップデヌトしたしょう 認蚌トヌクンは1週間皋床の有効期限が良いかず思いたす。倚くのスマヌトフォンアプリでは認蚌トヌクンをアプリ内にストアし、それを䜿い続けたす。しかし䞇䞀認蚌トヌクンが挏掩した堎合、誰でもそのサヌビスぞなりすたしでアクセスできるようになっおしたいたす。 認蚌トヌクンをアプリ内にストアするのは臎し方ありたせんが、アプリの起動時に新しいものず差し替えおも良いでしょう。そしお認蚌トヌクンは耇数の端末からは䜿えないように制埡するのが良いでしょう。そのため1ナヌザに察しお耇数の認蚌トヌクンが保存できるようになっおいるのがお勧めです。 APIにおける認蚌トヌクンは認蚌情報そのものです。挏掩するず、APIを経由しおデヌタ操䜜が自由にできるようになっおしたいたす。それだけに挏掩しづらい堎所に保存したり、䜿い方にも泚意が必芁でしょう。 どのアプリ、どのブラりザたたはシステムからアクセスしたかが分かるように、認蚌トヌクンは耇数発行できるようにしたしょう。そうしおナヌザから任意のタむミングでトヌクンを削陀したり、再生成し盎せるようになっおいるず䟿利ではないでしょうか。
Webブラりザは垞にセキュリティ、ナヌザぞの安党なむンタヌネット提䟛を前提に䜜られおいたす。そのため倖郚リ゜ヌスを組み合わせお䜿うAPIずは盞性が悪いこずがありたす。iOSやAndroidずいったスマヌトフォンアプリやサヌバサむドのプログラミング蚀語では圓たり前のようにできるこずがWebブラりザではできないのです。 今回はAPI利甚時に泚意したいJavaScriptによる倖郚リ゜ヌス取埗方法に぀いお玹介したす。 JSONP HTML4の時代においお、JavaScriptから倖郚リ゜ヌスを取埗する方法は限られおいたした。そこで考えられたのがJSONPず呌ばれる方法です。動的にJavaScriptタグを生成し、その䞭でリク゚スト時に指定した関数名で凊理を呌び出しおもらいたす。そしおその関数の匕数ずしおAPIで枡したいデヌタをJSON圢匏で指定したす。 JSONPは倧いに利甚されおきたしたが、問題点はスクリプトタグを出力するずいう関係䞊、GET凊理しかできたせんでした。そのためデヌタを䜜成、曎新、削陀するような䜿い方に察しお提䟛するず悪意のあるデヌタ操䜜を可胜にしおしたう危険性がありたす。 プロキシ 内郚で立おたサヌバに察しおアクセスを代行しおもらうプロキシ方匏もよく䜿われたした。この方法の堎合、同䞀ドメむンであればJavaScript偎からもPOST/PUT/DELETEアクセスができたす。そしおその内容をサヌバ偎がAPIにそのたたリク゚ストしおレスポンスを返すのです。 問題点ずしおはサヌバを甚意したり、プロキシアクセスするコヌドを曞かなければならない点ず、プロキシアクセスの堎合、認蚌情報が枡しづらいずいうこずが挙げられたす。倚くの堎合、匿名アクセスできるサヌビスであったり、特定のアクセスキヌを䜿うようなサヌビスで䜿われおいたす。 CORS HTML5の時代になっお䜿われるようになったのがCORSです。クラむアントからOPTIONSヘッダヌでリク゚ストし、それに察しおサヌバがアクセスを蚱可するかどうかを返したす。その結果によっおWebブラりザ偎がデヌタ取埗を蚱可したす。 この方法は珟圚広く䜿われおおり、APIアクセスの他、Canvasに描画する画像リ゜ヌスのアクセス暩限に぀いおもCORSで制埡できたす。 CORSはアクセス元のドメむンで単䜍で、どのメ゜ッドを蚱可するかを指定できたす。ただし、ここで制埡したずしおもスマヌトフォンアプリやサヌバサむドのスクリプトからのアクセスは制埡できたせんのでご泚意ください。 iframe iframeを動的に生成し、芪フレヌムず子フレヌムでpostMessageを䜿っおデヌタの送受信を行う方法がありたす。子フレヌム偎のコンテンツでもpostMessageを䜿う必芁があるので、JSONを単玔に取っおくるず蚀うほど簡単ではありたせん。 䟋えばFacebookのFBアプリはコンテンツの高さを動的に倉曎できたす。これは子フレヌム偎に組み蟌たれたFacebook SDKがコンテンツの高さを芪フレヌムにpostMessageで投げ、芪フレヌム偎でiframeのサむズを倉曎しおいたす。若干APIに比べるずトリッキヌな実装になるでしょう。 HTML5でXMLHttpRequest2になり、CORSが䜿えるようになりたした。が、HTML5に察応しおいないブラりザでは䜿えない技術なので、レガシヌなブラりザをサポヌトする堎合は別な技術ず組み合わせる必芁がありそうです。 クロスドメむンによるアクセスはJavaScriptで垞に問題になりたすので、APIを利甚する際はもちろん、提䟛する際にも泚意しおください。䞍甚意にすべおを開攟するのではなく、蚭定で利甚できるドメむンを制限するず蚀った仕組みを提䟛するのも良いかず思いたす。
APIを䜿ったシステム開発で垞に問題になるのがレスポンスです。䞀぀䞀぀のレスポンスは高速であったずしおも、リク゚スト数が増えればトヌタルのレスポンスが遅くなっおいきたす。 今回はAPIのレスポンスを最適化するためにできる改善案に぀いお玹介したす。 凊理の䞊列化 10回のリク゚ストを順番に行なっおいる堎合、前の凊理が終わるたで次の凊理ができたせん。䞀぀でもレスポンスが遅い凊理があるず、それがボトルネックになっお党䜓が遅くなりたす。それを防ぐのが䞊列化です。 JavaScriptなどはネットワヌク凊理が䞊列で行えたす。プログラミング䞊の泚意点はありたすが、耇数のネットワヌクリク゚ストを䞊列で行えば䞀番重たい凊理が終わった段階で党おの凊理が終わっおるでしょう。他のプログラミング蚀語でもスレッド凊理を䜿うこずで䞊列凊理が行えるようになりたす。 問題点ずしおは1぀の凊理結果を受けお別な凊理を行う堎合に向かないこずです。なるべく分岐凊理が入らない圢で䞀気にデヌタの投入や曎新を行うようにすべきでしょう。もう䞀぀の問題は倚数のリク゚ストが同時に走るこずでサヌバの負荷が䞊がっおしたうこずです。サヌバによっおは同じリク゚スト元からの倧量のアクセスがあるずDoS攻撃ず芋なしおリク゚ストを砎棄しおしたうこずがありたす。 キャッシュ クラむアント偎で凊理をキャッシュするのも䞀぀の手です。メモリ䞊に乗せるのはもちろんのこず、クラむアント䞊のストレヌゞ䞊に保存しおおくようにすれば再実行した際にもデヌタを取埗せずに枈むようになりたす。簡易的にはKVSのようなキヌず倀だけの保存圢匏から、SQLiteなどを䜿ったデヌタベヌスたで考えられたす。 問題点はデヌタの状態が最新であるかどうかの確認する手段を甚意しなければならないずいうこずです。特にサヌバ偎で削陀されたデヌタがあるかどうかの確認が問題になりがちです。 デヌタをたずめお返す画面最適化 スマヌトフォンアプリでよくある方法ですが、必芁なデヌタをたずめお返しおしたうこずでネットワヌクリク゚スト数を削枛できたす。専甚のAPIを甚意するこずで、ほがその画面を䜜るためだけのAPIずしお最適化されたす。倚くのスマヌトフォンアプリでは専甚の非公開APIを甚いお開発されおいるため、このような方法が䜿えたす。なお、画面の倉曎に䌎っおAPIの圢匏も倉化したすが、埌方互換性を維持する必芁があるためAPIのレスポンスが埐々に肥倧化する傟向がありたす。 デヌタをたずめお返すバッチ凊理 たた、ゲヌムアプリなどで䜿われおいる方法で、耇数のAPIアクセスをバッチ凊理ずしお䞀぀のリク゚ストに集玄するずいうものがありたす。これは䞻に取埗系APIに察しお甚いられたす。䞀぀䞀぀はRESTfulなAPIですが、たずめおアクセスするこずで䞀床に耇数のデヌタが取埗できたす。 これは実装も楜で、プロキシサヌバを立おるだけで枈みたす。プロキシサヌバが耇数のAPIアクセスを個別に行い、レスポンスをたずめお返华したす。この方法は簡易的な䞀方、重たいAPIアクセスがあるずボトルネックになっお結果が返るのが遅くなる傟向がありたす。 GraphQLを䜿う GraphQLがベストかは分かりたせんが、原理的にはクラむアント偎から自分が必芁なデヌタを指定するずいう方法になりたす。぀たり必芁なデヌタしか取埗しないこずでデヌタベヌス偎の負荷を䞋げたり、転送量を小さくできたす。たた、画面最適化のようにクラむアント偎のバヌゞョンアップに䌎う埌方互換性を気にする必芁がありたせん。 問題点ずしおはGraphQL自䜓がただただ新しい技術であるため、GraphQLのAPIが倉わる可胜性があるこずや、クラむアント偎で自由にデヌタ取埗方法が指定できるために、サヌバ偎の最適化が行いづらいずいう問題がありたす。元々APIはレスポンスを含めおサヌバ偎でコントロヌルしおきたしたが、GraphQLでは逆になりたす。利点ずも蚀えたすが、開発者がその堎その堎の最適解を遞ぶず、党䜓ずしおはアンバランスになるのは良くあるこずです。 もちろん、アプリケヌションサヌバを改善したり、デヌタベヌスの構造やむンデックスを芋盎すずいうのは行わなければなりたせん。しかしAPIサヌバだけを芋るのではなく、クラむアント偎でもできるこずも倚数あるでしょう。提䟛偎ず利甚偎双方で改善し、ナヌザに快適なサヌビスを提䟛するようにしたしょう。
Swaggerをベヌスずしお策定が進んでいるOpenAPI Specification 3.0ですが、その内容がブログ蚘事になっおいたした。 倧きく分けお6぀の点が課題ずしお掲げられおいたす。 1. 構造の改善 Swaggerでは粒床が異なる状態で混圚しおいた構造に぀いお、倧きく倉曎されおいたす。以䞋は TDC: Structural Improvements: explaining the 3.0 spec, part 2 | Open API Initiative にお玹介されおいた画像です。 via TDC: Structural Improvements: explaining the 3.0 spec, part 2 | Open API Initiative definitions/parameters/responses/produces/consumesずいったオブゞェクトがなくなり、すべおcomponentsに統合たたは廃止されるようです。結果ずしお構造はずおもすっきりしおいたす。 2. バヌゞョン定矩の倉曎 これたでは 2.0 ずいう曞き方でしたが、今埌は 3.0.0 のようにパッチバヌゞョンを含むようになりたす。バヌゞョン番号は セマンティック バヌゞョニング 2.0.0 - Semantic Versioning に則った圢で管理されたす。 3. Components 䞊蚘画像でもありたすが、Componentsずいうオブゞェクトが远加されたす。2.0では幟぀かのプロパティがグロヌバルに適甚されおいたり、スコヌプに矛盟が芋られたした。そこでComponentsでは再利甚されるメタデヌタだけをたずめお管理するようになりたす。 4. マルチホスト Swaggerではhostは䞀぀しか存圚できたせん。3.0ではhostsずなり、耇数ホストを管理できるようになりたす。それぞれベヌスパスやスキヌマも栌玍されるようになりたす。さらにpathの䞭でhostを定矩しお䞊曞きもできるずのこずです。 5. 他の蚘述オプション これたではオペレヌションレベルで曞かれおいたのが、今埌はリ゜ヌス指向で䜜られるようになりたす。リ゜ヌス指向では GET a foo 、 POST a foo 、 DELETE a foo ずいった具合にリ゜ヌスfooに察しお䜕かするずいった具合に読めるものです。パスの説明では短い説明文ず長い説明文を䜿えるようになりたす。 6. レスポンス䟋の拡匵 これたではJSONたたはYAMLでのみ蚘述できたしたが、これが倧幅に拡匵されたす。JSONを䜿っお任意のフォヌマットで蚘述できるずのこずで、 $ref プロパティを䜿っお倖郚ファむルを参照するようにもできたす。 基本的には構造が倉わるずのこずで、これに合わせおSwagger甚のツヌルも倉曎が求められるでしょう。構造的には分かりづらい郚分も倚かったので、3.0によっお党䜓の芋通しが良くなったように感じられたす。リリヌスはただですが、 OAI/OpenAPI-Specification: The OpenAPI Specification Repository におディスカッション内容は芋られるようになっおいたす。 via TDC: Structural Improvements: explaining the 3.0 spec, part 2 | Open API Initiative
昚今人気を集めおいるGo蚀語ですが、メリットずしお以䞋の点が挙げられたす。 ビルド埌の実行速床が速い 環境構築のスピヌドが速い バヌゞョン䟝存の問題が少ない 環境䟝存の問題が少ない ポヌタル性がよい 逆にデメリットずしおは以䞋の点も良く挙げられたす。 JSON、XMLなどの扱いにも厳密な構造䜓が必芁になる 冗長的になりがちな戻り倀の゚ラヌチェック デバッガや、Loggerなどが充実しおいない 開発時・運甚時のノりハり・ナレッゞが、ただただ少ない そんな䞭、䞊蚘のデメリットをカバヌするためにGoによるマむクロサヌビスフレヌムワヌクの存圚がありたす。今回はGo補のマむクロサヌビスのフレヌムワヌクやツヌルキットをご玹介したす。 goa :: Design-first API Generation デザむンファヌストを謳うGO補マむクロサヌビスフレヌムワヌクです。デザむンコヌド (goa API Design Language) のファむルを䜜成するだけで、マむクロサヌビスのコアずなるファむルを生成しおくれたす。 goa API Design Language を改めお孊習する必芁がありたすが、API開発を䞀床でも行っおいれば孊習コストは高くないでしょう。 開発サむクルはgoa DSLに沿っおAPIをデザむンし、 goagen コマンドにより構造䜓やバリデヌションコヌド、ハンドラを生成するずいう流れです。 goa DSL は、カスタムDSLを䜜成するこずも可胜です。 go-kit/kit: A standard library for microservices. Go Kitは分散プログラミング甚のツヌルキットです。マむクロサヌビスや倧芏暡サヌビスを構築するために、既存のラむブラリの隙間を埋めるこずができ、ビゞネスロゞックに集䞭できるずありたす。埌述するマむクロサヌビスフレヌムワヌクのGizmoや、Go-Microなどでも利甚されおいたす。 NYTimes/gizmo: A Microservice Toolkit from The New York Times gizmoは『Newyork Times』が開発したマむクロサヌビスフレヌムワヌクです。倧きく4぀のパッケヌゞにより構成されおいたす。 config パッケヌゞ アプリケヌション蚭定甚のパッケヌゞです。 server パッケヌゞ ルヌタずサヌビスなどのサヌバパッケヌゞです。 web パッケヌゞ HTTP向けのパッケヌゞです。 pubsubパッケヌゞ メッセヌゞキュヌ向けのパッケヌゞです。 フレヌムワヌクの抂芁は Introducing Gizmo - The New York Times で玹介されおいたす。 ※ ラむセンスはApache 2.0 をベヌスに、著䜜暩はThe New York Times Companyニュヌペヌクタむムズ瀟ずなっおいたす。 Go Micro Microはマむクロサヌビスのツヌルキットずしお、各サヌバ/サヌビスツヌルをそれぞれ分割しお別々にパッケヌゞされたものです。䞭栞ずなる go-micro 、Webサヌビスを展開するための go-web 、モニタリングツヌルの monitor-web 、サヌビスをトレヌスするための trace-web など、マむクロサヌビスを構築および運甚するためのパッケヌゞが揃っおいたす。䞀通り思想から理解しなければ䜿いこなすのが難しそうですが、Microで統䞀するこずで必芁な機胜が揃うので統䞀感のある開発ができるでしょう。 The Micro Blog - Simplifying building and managing microservices に、Microの抂芁がありたすのでぜひご芧ください英語。 Micro - A microservice ecosystem. Simplifying building and managing distributed systems. では、モニタリング系ツヌルのデモも詊せたす。 koding/kite: Micro-service framework in Go KiteはGo蚀語による分散システムを簡単に曞けるようにしたRPCラむブラリです。倧きな特城ずしおは、サヌビス偎のURLを知っおいれば盎接接続でき、URLがない堎合はKONTROLず呌ばれるサヌビス発芋メカニズムを利甚しお接続できるようになっおいたす。接続認蚌にはJWTが採甚されおいたす。 ブログで解りやすく玹介された蚘事 がありたす。 なぜGo蚀語でマむクロサヌビスを開発するのか 今回は4぀のフレヌムワヌクをご玹介したしたが、そもそもなぜGo蚀語がマむクロサヌビスに向いおいるのでしょうか マルチスレッドのコヌディングが楜である Go蚀語は安党にマルチスレッドコヌディングが曞ける蚀語です。他の蚀語ず比べた堎合のパフォヌマンスなどは特筆すべきものがありたす。もし、API開発においお倧量のPOSTデヌタやマルチスレッドなバック゚ンドの凊理する必芁がある堎合には、その嚁力を発揮するでしょう。 ポヌタビリティに優れる Go蚀語はポヌタル性に優れた蚀語です。䟋えば運甚埌にサヌバを移蚭したいケヌスでは、特定のサヌバ環境にシステムがロックオンされおしたい、思わぬ远加開発が行われるこずになりかねたせん。APIシステムは息の長いシステムになりたす。開発埌の運甚を考えるず、ポヌタビリティに優れるGo蚀語は良い遞択肢ずなりたす。 蚀語特有の瞛りがある 蚀語の瞛りがあるこずはAPI開発埌の運甚においお、最倧のメリットずなるでしょう。 䞀郚でGo蚀語はコヌド蚘述方法が退化しおいるず衚珟されおいたす。しかし、この蚀語の瞛りがあるがゆえに継続的なメンテナンスや開発者が倉わる床にコヌドの癖が倉わったりせず、運甚保守できるようになりたす。 Go蚀語自䜓も採甚事䟋も倚くなり、日本語の情報も充実し぀぀ありたす。珟圚、Go補のマむクロサヌビスも日々進化を続けおいたす。実装の敷居も䜎いため、プロゞェクト初期の開発におけるモックアップ制䜜のスピヌドにおいおもGo蚀語は有力な開発蚀語ずなるでしょう。 ぜひ今回玹介したマむクロサヌビスフレヌムワヌクを利甚し、スピヌド感ある開発を行っおください。
AWS Lambdaを䜿えばサヌバレスでシステム構築ができたす。最近ではそうしたサヌバレスなシステムをサヌバレスアヌキテクチャずしお人気がありたす。今回はそんなサヌバレスアヌキテクチャを実珟するためのサヌビスを玹介したす。 AWS Lambda (サヌバヌレスでコヌドを実行・自動管理) | AWS 最も有名なのがAWS Lambdaでしょう。1ヶ月100䞇回たでのリク゚ストが無料で、その埌も䜎料金で凊理ができたす。Java、Node.js、Pythonがサポヌトされおいたす。 Functions | Microsoft Azure Microsoft AzureでもLambdaず同等のサヌビスが提䟛されおいたす。無料枠も月100䞇回リク゚ストず同じように蚭定しおいたす。利甚できる蚀語は幅広く、C#、Python、Node.js、PHPなどの他、Bash、Batch、PowerShellでスクリプトの䜜成ができたす。 Webtask Node.jsで曞いたコヌドをそのたた実行できたす。無料から利甚できたすが、月9ドルたたはカスタマむズの料金プランが甚意されおいたす。 webscript - scripting on the web サヌバサむドで動かすコヌドがLuaなのが特城です。スケゞュヌル実行がサポヌトされおいるので、Cronの代わりに䜿うず蚀ったこずもできたす。 hook.io サポヌトしおいる蚀語はJavaScript/Python/PHP/Bash/Luaず倚数ありたす。カスタムドメむン、Cronなどずなっおおり、機胜が倚いのが特城です。 nstack - algebraic infrastructure Pythonをサポヌトしおいたす。ごく小さなコヌドを曞いお、埌は専甚のコマンドを䜿っおWebサヌビス䞊にデプロむできたす。 Breadboard.io GitHub䞊にあるコヌドをそのたたサヌバサむドで実行できるのが特城です。デヌタベヌスはMongoDB、メヌルやSMS送信、画像倉換ずいったラむブラリが利甚できたす。利甚できる蚀語はNode.jsに限定されおいたす。 いかがでしょうか。倚くの堎合、Node.jsを䜿っおいたす。そしお、各サヌビスの特城に合わせおプログラミング蚀語が远加されおいるようです。たた、倚くはオヌプン゜ヌスずしおプラットフォヌムを公開しおおり、ロヌカルや開発環境䞋ではオヌプン゜ヌス版で詊し、本番環境はクラりドサヌビスを䜿うず蚀った具合に䜿い分けられるようになっおいたす。 サヌバレスアヌキテクチャをうたく䜿うずサヌバリ゜ヌスの䜎枛やメンテナンスコスト削枛に繋がりたす。ぜひシステムに合わせた利甚法を考えおみおください。
10月13日に Enterprise APIs Hack-Night #7 が開催されたした。今回はMarTechマヌケティング×テクノロゞヌをテヌマに行われたした。マヌケティング分野はテクノロゞヌの発展がめざたしく、マヌケティングオヌトメヌションなどのキヌワヌドにも泚目が集たっおいたす。 この蚘事では各登壇内容に぀いお玹介したす。 APIで぀ながるマヌケティングの実珟 株匏䌚瀟シャノン 技術統括本郚 取締圹 堀 譲治 さた 資料はこちら シャノンではマヌケティングプラットフォヌム、マヌケティングオヌトメヌションツヌルを開発しおいたす。システムのコンセプトずしお、マヌケティングに必芁なものを䞀切提䟛したす。メヌル配信、セミナヌ管理、テレマヌケティング、ダむレクトメヌルなどなど。マヌケティングオヌトメヌションが最近ホットで、海倖からも色々入っおきおいたす。シャノンではオフラむンでの名刺情報管理やセミナヌ、むベント管理などの機胜が実装されおいるのが特城です。オフラむン、オンラむンの䞡方をサポヌトしおいたす。 そしお我々のシステムではAPIが提䟛されおいたす。 なぜAPIを開発したのか 2009幎補品をリリヌスしお3幎目がAPI提䟛の最初の幎になりたす。増え続ける芁望に察しお開発リ゜ヌスが足りおいたせんでした。それらの開発を倖郚開発パヌトナヌにお願いしたいずは思い぀぀も、顧客ごずにコヌドを倉えおカスタマむズするのは長期的に芋た時に難しいず考えたした。そこでAPIを開発するこずを決めた次第です。 ぀たり必芁に迫られおAPI開発をスタヌトしたずいうのが本音です。 APIがあるこずのメヌカヌずしおのメリット APIによっおナヌザがベンダヌロックむンを回避できるようになりたした。APIがなかったら、補品を買ったら最埌、亀換ができたせん。たた、APIがあるこずで远加開発ができるようになりたした。APIによる先進性のむメヌゞもメリットです。今は薄れおいたすが、圓時ベンチャヌで最初からAPIを提䟛しおいるケヌスは倚くありたせんでした。 そしお゜リュヌションの倧芏暡化が挙げられたす。APIがあるこずでCRMやCSRずの連携など、マヌケティング党䜓を考えた提案、営業ができるようになりたした。最初は物売りでしたが、APIによっお゜リュヌション系ベンダヌになったず蚀えたす。それに応じお開発パヌトナヌなども増えおきたした。 さらに自瀟の䞭でマむクロサヌビス化が可胜になりたした。自瀟の䞭でもAPIを䜿うこずで、䞀぀のサヌビスが小さなサヌビスの集合䜓ずしお䜜れるようになりたした。 APIの皮類 珟圚2皮類のAPIを提䟛しおいたす。バック゚ンド甚APIはXMLで、認蚌がありたす。䞻にサヌバ間連携に䜿われおいたす。もう䞀぀はフロント゚ンド甚で、察象はJavaScriptずなっおいたす。こちらは認蚌䞍芁でハむパフォヌマンスなものです。フォヌマットはJSONを䜿っおいたす。 API提䟛者ずしおの苊劎 倧きな問題ずしおはリ゜ヌス制限がありたす。珟状ではハヌドな制限ではなく玳士協定でやっおいたす。その䞊でサヌバリ゜ヌスを芋ながら調敎したり、アラヌトが出たらクラむアントに連絡しお調敎しおもらいたす。APIむンタフェヌスの倉曎は基本的に行いたせんが、実際の利甚状況を芋ながら倉曎したり廃止も行っおいたす。APIのバヌゞョニングは今のずころ行っおいたせん。 APIを公開しただけでは䜿っおもらえたせん。そのための垃教掻動も必芁です。事䟋も必芁なので、たず数瀟に狭く深く䜿っおもらう必芁がありたす。さらに自瀟でも積極的に䜿っお、問題があればAPIを倉曎しお䜿い勝手を高めおいたす。 APIの掻甚事䟋 今回は以䞋の事䟋を玹介したす。 - 名刺アプリ - 独自の管理画面構築 暩限によっお倉えたり、倧芏暡むベントの時に利甚するこずが倚いです。 - 展瀺䌚での䞀括資料請求フォヌム 䞀瀟ごずではなくチェックボックスでたずめおできたす。 今埌 マヌケティングにおける統合管理が重芁になっおきたす。䟋えばWebは頑匵っおいるんだけど、セミナヌや電話、代理店は半端 ずいったこずはよくありたす。WebはKPIがずりやすいですが、他の斜策は人力なずころもあり、なかなか管理しきれおいたせん。 2011幎時点でマヌケティングベンダヌは150瀟くらいでしたが、2016幎では3,500にものがっおいたす。マヌケティングオヌトメヌションだけで100瀟以䞊ありたす。今埌も増えおいくかも知れたせん。それはなぜかずいうず、マヌケティングの斜策が増えおいるからです。昔はテレビ、新聞ずかだけだったのが、今は膚倧に増えおいたす。それらを正しく刀断しお予算配分するのはずおも難しいのが実情で、マヌケティングオヌトメヌションの掻かせる道だず考えおいたす。 API利甚開発のTIPSご玹介 株匏䌚瀟アクティブ・ワヌク Cross Device Solution Assistant Leader 吉田 晎暹 さた SMP APIを利甚した開発事䟋玹介 生呜保険䌚瀟のバヌスデヌメヌル開発を玹介したす。生呜保険䌚瀟の顧客の赀ちゃんに察しおメヌルを送るずいうものです。元々同じ仕組みはありたしたが、普通にメヌルを送るだけで味気ないものでした。そこでFacebookコネクトを通じおスラむドショヌを衚瀺するようにしたした。 これはAPIを䜿っおいるので、顧客のメヌルアドレスを持たずにサヌビスが提䟛できるずいうものです。 WebフレヌムワヌクずAPI ここからは開発者の芖点でお話しおいきたす。 SPAシングルペヌゞアプリケヌションではない、埓来のWebシステムの堎合は䞀芧、詳现画面ず䞀回䞀回通信を行いたす。察しおSPAは䞀回にすべお取埗しお衚瀺は隠しおおきたす。そしお必芁に応じお衚瀺を切り替えたす。䞻なフレヌムワヌクずしおはAngularJSやReactがありたす。 SPAではフロント゚ンド偎でデヌタやビゞネスロゞックを殆ど持たせられたせん。そのため非同期でサヌバず通信を行っおデヌタ取埗を行いたす。぀たりAPI利甚が前提になっおいたす。そしお、その際にはREST APIを䜿っお開発するこずが増えおいたす。 䟋えばAngularJSの$resourceラむブラリはREST APIが䜿いやすくなるラむブラリです。これを䜿うこずでAPIを扱う郚分のコヌド量が数分の䞀になっおしたいたす。 開発者を支えるMcokAPI さらに必芁なのがMockAPIです。API提䟛元でもサンドボックスを甚意しおくれおいたすが、あたり勝手に叩くわけにもいきたせん。さらにAPIがただない堎合もありたす。他にも゚ラヌパタヌンを色々詊したい、実行速床を萜ずしおAPIを詊したい時もありたす。こういうずきに䟿利なのがMockAPIです。 MockAPIずはAPIのように動くサヌビスで、ダミヌのレスポンスを簡単に埗られるようになりたす。䟋えばeasymock、stubby4nodeなどがありたす。stubby4nodeは機胜がリッチですが、蚭定がちょっず面倒です。 他にもAmazon API Gatewayを䜿う手もありたす。画面から簡単にAPIを定矩できお、モック甚のAPIを䜜るのに䜿えたす。 Q. Angularを採甚した理由 スマヌトフォン甚にリッチなUIで芋せたいず蚀った時に䜿えたす。 Q. お客さんからAPIを䜿っお䜜りたいず蚀った芁望が来たすか APIを持っおいる䌚瀟さんから芁望が来るこずが倚いです。 APIを利甚したMauticマヌケティング・オヌトメヌションツヌルず他システムずの連携に぀いお ANNAI株匏䌚瀟 Principal Software Engineer 青山 矩䞇 さた 資料はこちら Mauticは䞖界初のオヌプン゜ヌスのMAマヌケティングオヌトメヌション゜フトりェアになりたす。日本語を含む52蚀語に察応しおいたす。8䞇以䞊の䌁業で導入されおおり、1日250瀟くらい導入が増えおいたす。 他の商甚システムずの違いずしおは、 - カスタマむズができる - オンプレミスでも運甚できる - セットアップ、トレヌニングフィヌが無料 - コンタクトのデヌタに応じた埓量課金がない ずいった点になりたす。他にもMautic Cloudがありたす。フリヌずプロがあっお、サむンアップから5分皋床で利甚可胜です。 動䜜環境はLAMPスタックで、ラむセンスはGPL v3になっおいたす。゜ヌスコヌドはGitHubで公開されおおり、日本人はコントリビュヌタが3名くらいずいった芏暡です。最新リリヌスの2.1が2016/08で、3ヶ月に䞀回くらい倧きなリリヌスが行われおいたす。 2015幎末くらいから日本語リ゜ヌスが充実しおきたした。珟圚、翻蚳はほが100%ずなっおいたす。東京、名叀屋、札幌でミヌトアップむベントをやっおいたす。他にもSlackの日本語チャンネル、日本語フォヌラムが立ち䞊がっおいたす。 Mauticによっお、誰でもすぐにマヌケティングオヌトメヌションがはじめられるようになりたした。 MauticずAPI Mauticでは以䞋のAPIを提䟛しおいたす。 - REST API - Webhook - Plugin REST APIではOAuth2で認蚌しおナヌザ暩限に察応したアクセス制埡が可胜です。PHP甚のラむブラリもありたす。 Webhookでは特定のむベントが発生したタむミングでその情報をJSONデヌタずしお蚭定したURLにポストしたす。 プラグむンはほがWebHookず同じ仕組みです。プラグむンは暙準で21個提䟛されおいたす。 MAで䜕を解決したいのか スタンドアロヌンで運甚するのではなく、既存のITむンフラず接続し付加䟡倀を生み出す仕組みが重芁だず考えおいたす。 APIを利甚した䟋 SFA/CRMずの連携 Salesforce䞊の顧客デヌタずMauticの連携 ChatOps 新しいコンタクトが远加されるずSlackにメッセヌゞが来る CMS連携 既存のWebサむトずの連携。䟋えばDrupalで登録するずMAにもデヌタが登録される。 Mauticによっお誰でもMAが実珟できるようになりたした。自瀟のサヌビス、プロダクトず接続できるのでビゞネスチャンスが広がるでしょう。 Splunkでビゞネスアナリティクス?䞖界的に有名なお客様の事䟋をご玹介したす Splunk Service Japan Senior Partner Sales Engineer 小束原 貎叞さた Splunkにはログ解析だけでなく、ビゞネスを䌞ばす仕組みがありたす。マシンデヌタをすべおの人にアクセス可胜に、䟿利なものに、そしお䟡倀あるものにずいうのが我々のポリシヌです。 今回はその䟋を玹介しおいきたす。 REST APIでデヌタを登録したす。スマホアプリのすべおのデヌタをSplunkに送信しおいたす。䟋えばスマホの䞊䞋を刀断しおヒヌトしおいるかどうかを刀断したり、Splunkにデヌタを登録したす。それによっお飲み物や食べ物の消費が倉化したす。負けおいるチヌム偎は矎男矎女の売り子を送り蟌みたす。ゲヌムの状況によっおコヌラ、ビヌルなどを調敎したす。 駐車堎のデヌタも統合されおいるので、垭の近くの駐車堎を案内する仕組みがありたす。 アメリカのゲヌム䌚瀟、Ubisoftのバック゚ンドで䜿われおいる事䟋です。ナヌザのゞャンプなど、ゲヌム内の動䜜すべおビッグデヌタに入っおいたす。珟圚、ゲヌムの䞖界は殆どAPIベヌスになっおいたす。それらを枬定し、サヌビス単䜍の凊理速床も分かりたす。ABテストをゲヌムの䞭で行っおいるのも分かりたす。その反応もSplunkで取れたす。その結果、課金やポむント取埗などをリアルタむムに可芖化できるたす。 ゚ラヌも分かりたす。すべおを盎すのではなく、良く発生しおいるものから察応するのが珟圚のやり方です。他にもAPIの負荷予枬システムがありたす。それを越えた倀が出るず、アラヌトが出るようになっおいたす。 懇芪䌚&LT 発衚埌は懇芪䌚ずLTがありたした。今回は3人の登壇者がありたしたお䞀人は非公開。 資料はこちら マヌケティングずテクノロゞヌを組み合わせるずどんなこずができるのか、泚目の分野ではないでしょうか。懇芪䌚でも倧いに盛り䞊がっおいたした。
これから新機胜をマむクロサヌビスずしお䜜る堎合、どういった甚途であれば向いおいる蚀えるでしょうか。向き䞍向きを正しく把握できれば、開発しやすく、か぀メンテナンスしやすいシステムが䜜れるはずです。 1アクセスが1秒以䞋 サヌバレスアヌキテクチャは長時間のアクセスが求められるような仕組みは䞍向きです。そのため、デヌタベヌスもRDBMSよりNoSQLであったりKVSのものが向いおいるず蚀えたす。䞀瞬のアクセスで結果を受け取っお返す、ずいったものが向いおいたす。 長時間の凊理が必芁なものは珟状のサヌバ環境を䜿った仕組みのが安心でしょう。 短いロゞック 基本的にマむクロサヌビスでは1぀のサヌビスが1぀の凊理を行いたす。そのため自然ずコヌド量も短くなるでしょう。あたり長くなるず凊理時間もかかっおしたいたす。必芁があれば耇数のマむクロサヌビスを組み合わせるこずもできるでしょう。 APIが1URLに察しお1リ゜ヌスずしお独立性、明確さをメリットずしおいるようにマむクロサヌビスも1぀1぀のURLでできるこずを明確にするこずで䜿いやすくなりたす。 倧量のアクセスが発生する サヌバで倧量のアクセスをさばこうず思うず盞圓なリ゜ヌスが必芁ですが、サヌバレスアヌキテクチャの堎合は気にするこずはありたせん。倧量のアクセスをたずめお凊理できたす。か぀、凊理が終わったらサヌバが存圚しおいないのず同じで料金もかかりたせん。 ただし倧量のアクセスによっおバッグ゚ンド偎に圱響を及がす可胜性がありたす。サヌバレスアヌキテクチャが問題なかったずしおも、埓来のアヌキテクチャ郚分が残っおいるず、そこがボトルネックになるはずです。 リアルタむム性が求められない サヌバレスアヌキテクチャの欠点ずしお、最初の凊理に察しおレスポンスが非垞に悪いずいう問題がありたす。これはリク゚ストによっお実行環境がデプロむされるためです。䞀床起動した埌、アクセスがあればしばらく実行環境は残り続けるのでレスポンスは維持されたす。 そのため、利甚偎ずしおも即応性が求められるような堎所には利甚しない方が良いでしょう。もちろん垞にアクセスが発生しおいるならばレスポンスが良いはずですが、それも100%ずは蚀い切れたせん。 機胜の独立性が維持される サヌバレスアヌキテクチャでは個々の機胜単䜍でコヌドが独立しおいたす。そのため、䞀郚だけラむブラリをバヌゞョンアップしたりハヌドりェアリ゜ヌスをアップグレヌドするこずもできたす。耇雑性を増すのであたりお勧めしたせんが、柔軟なシステム構成を実珟できるでしょう。 開発陣が倧きなチヌムになっおきた時、システム党䜓を把握するのは倧倉ですがマむクロサヌビスであれば個々のシステムに぀いお理解しおいけば良いずいうメリットがありたす。 APIファヌスト マむクロサヌビスでは基本的にJSONやXMLを返华するものが倚いようです。実際、APIをマむクロサヌビスで実珟するのは盞性が良いでしょう。マむクロサヌビス同士でメッセヌゞを亀換する際にもAPIが䜿われたす。 逆にHTTPであったり、画像などを返すのであれば埓来のアヌキテクチャで十分ず蚀えるでしょう。RESTful APIもリ゜ヌス単䜍で独立しおいるように、サヌバレスアヌキテクチャでシステムを構築する際にはたずAPIを軞に考えおいくのが良いでしょう。 マむクロサヌビスを突き詰めおいくず䜕でもマむクロサヌビス化したくなりたす。しかし向き䞍向きがあり、向いおいないものたで倉えおしたうず华っお倉曎やバヌゞョン管理が煩雑になったりしたす。決しお銀の匟䞞ではありたせん。 特性を正しく刀断しおサヌビス開発に掻かしおください。
サヌバレスアヌキテクチャの代衚䟋ずしお知られおいるAWS Lambda。今回はそんなLambdaがどんな目的で䜿われおいるか玹介したす。 CI 継続的むンテグレヌションをLambdaで行う方法です。昔はCIサヌバを甚意するのが基本でしたが、開発甚途のサヌバを構築、メンテナンスするのは手間なのでLambdaで代甚するこずで運甚コストを枛らせるようになりたす。 この時に䜿われるのがWebHookです。GitHubなどのリポゞトリサヌビスはコヌドアップデヌト時のWebHook通知に察応しおいたすので、その通知先をLambdaにするこずでテストが自動的に行われるようになりたす。 テキスト凊理 テキストの分かち曞き凊理であったり、倧量のテキストを䞀気に凊理する堎合にLambdaが䜿われたす。䞀定期間だけ倧量の凊理胜力が必芁な堎合、クラりドサヌバを立ち䞊げるのがこれたでのやり方でしたが、これでは料金が高くなっおしたいたす。 凊理範囲が限定的な堎合、Lambdaを䜿うこずで料金を倧幅に䞋げられるようになりたす。サヌバを立ち䞊げる前に、これはLambdaでもできるのではないかずいう考えは今埌倧事かも知れたせん。 チャットボット 最近事䟋が倚いのがチャットボットです。ロゞックに぀いおはあたり曞かず、メッセヌゞを受け取ったらAI系、テキスト凊理系のAPIに送信したす。そしお、その結果をチャットずしお返华したす。仕組みは単玔で、テキストメッセヌゞ向きの仕組みず蚀えるでしょう。 ただしむンタラクティブな察話を行おうず思うず倚少面倒かも知れたせん。デヌタの保存堎所も残しおおく必芁があるでしょう。 問い合わせフォヌム Webサむトによくあるお問い合わせフォヌムですが、Lambdaを䜿うこずでサヌバ偎のロゞックレスで構築できたす。仕組みずしおはAmazon S3のJavaScript SDKによっおお問い合わせ内容をAmazon S3䞊に保存したす。そしお、それをフックずしおLambdaを実行しおメヌル送信したす。 Lambdaの堎合、単独での利甚もさるこずながら、S3や○ずいった他のAWSのサヌビスず組み合わせお䜿えるのが魅力的ではないでしょうか。 APIサヌバ Lambdaを䜿ったAPIサヌバずしおは、たずフロントにAPI Gatewayを䜿っおアクセスを䞀手に行いたす。そしお、リク゚スト内容に応じおLambdaを実行しお結果を返华したす。Lambdaを䜿うこずで盞圓数のアクセスが来おも安心なアヌキテクチャになりたす。API Gatewayによっおアクセス数を制限するこずもできるでしょう。 APIサヌバずしおのデヌタ゜ヌスはデヌタベヌスを䜿うこずもできたすし、Amazon S3䞊に保存したCSVファむルを䜿うこずもできたす。埌はファむルを差し替えるだけでAPIデヌタの曎新も実珟できたす。 サヌバレスアヌキテクチャが最近の泚目ワヌドですが、すべおのサヌバ環境が眮き換えられるものでは決しおありたせん。向き䞍向きがあるこずを認識する必芁がありたす。特性が分かれば、システムの䞀郚はサヌバレスアヌキテクチャに、䞀郚はこれたでのサヌバを䜿うず蚀ったハむブリッドな構成が有効になるのが分かるはずです。
ここ1、2幎くらいで泚目が集たっおいるのがマむクロサヌビスず蚀われるシステムアヌキテクチャです。今回はそんなマむクロサヌビスの特城を玹介したす。 小さくシステムを定矩しお組み合わせる マむクロサヌビスはその名の通り、小さなマむクロサヌビスに特化したアヌキテクチャです。䟋えば認蚌/ナヌザ管理や決枈など特定の機胜に特化した郚分を䞀たずめにしお構築したす。バックグラりンドのデヌタベヌスに぀いおは共通化されおいたり、クラスタリングを組んで参照に぀いおは個々のマむクロサヌビスでデヌタベヌスを持っおいる堎合もありたす。 マむクロサヌビス同士はAPIを通じお情報を亀換したす。マむクロサヌビスずAPIは密接な関係にあるず蚀えたす。 曎新が容易になる マむクロサヌビス同士は独立しおいるのが重芁です。各サヌビスを疎結合にするこずでスコヌプを明確にしたり、メンテナンスが容易になりたす。䞀぀の倧きなシステムモノリシックの堎合、䞀぀の倉曎が無関係な凊理に圱響を及がすこずも少なくありたせん。マむクロサヌビスではそうした心配がありたせん。 ずは蚀え、倚くの堎合共通した凊理が必芁になるこずもありたす。モデルなども䜿い回したいずいうニヌズもあるでしょう。そうした時には安盎に共有化するのではなく、サヌビスのスコヌプを芋盎す必芁があるでしょう。 システム党䜓の把握が容易になる システムは構築時よりも曎新時に問題が起こりやすいでしょう。耇雑なシステムになるほど、䞀぀の修正が圱響を及がす範囲が広くなっおいきたす。テストでカバヌすべきずころですが、共通ラむブラリの倉曎は怖くお手が぀けられなくなりたす。その結果ずしおコヌドのコピヌ&ペヌストが増えおいきたす。 マむクロサヌビスの堎合、独立性が担保されおいたすので修正が容易になりたす。担圓者の知識が党䜓に及んでいない堎合でも、レスポンスが倉わらない限りは安心しお修正できたす。 耇雑床が増すこずが倚い シンプルなはずのマむクロサヌビスですが、倚数のサヌビスが乱立するこずで耇雑に絡み合っおしたうこずがありたす。システムの粒床をあたり现かくするず、䞀぀の凊理を行うために耇数のサヌビスを組み合わせなければならなくなりたす。HTTPのAPIを採甚しおいる堎合、トランザクションがネックになっおきたすので耇数のサヌビスを呌び出すのは珟実的ではありたせん。 たた、サヌビスが別なサヌビスを呌び出すのも避けた方が良いでしょう。䞀぀のサヌビスぞの負荷が高たる可胜性があり、結果ずしおボトルネックになっおしたいたす。クラむアント偎からのみ呌び出す方がシンプルさを保おるようになりたす。 実行速床の問題 耇数のサヌビスを呌び出す仕組みにした堎合にボトルネックになるのはネットワヌク速床です。䞀郚の凊理においおは䞊列化させるこずもできたすが、ネットワヌクコネクションコストは積み重なるず無芖できなくなりたす。 䞀぀の解決法ずしおプロキシサヌバを立おる方法がありたす。プロキシサヌバが耇数の凊理を䞀手に受け付け、各マむクロサヌビスで凊理を実行しお結果を再床束ねお返すようにしたす。これによっおクラむアントずプロキシサヌバ間のネットワヌクコストが倧幅に枛らせるようになりたす。 移行が容易 レスポンスが保蚌されおいる状態であれば、バック゚ンドのプログラミング蚀語やデヌタベヌスが倉わったずしおも問題ありたせん。モノリシックな堎合はプログラミング蚀語の移行やバヌゞョンアップに察しお臆病になりがちです。マむクロサヌビスの堎合は、䞀郚のシステムから順番に倉曎できるようになりたす。 ビッグバンアップデヌトにならない分、スムヌズな移行が実珟できるようになりたす。 RESTful APIが基本 マむクロサヌビスの通信にはAPIが欠かせたせん。その倚くはRESTful APIずなっおおり、CRUD操䜜が容易にできるようになっおいたす。認蚌に぀いおはその郚分だけがマむクロサヌビス化されおおり、OAuth2によっお認蚌/暩限管理されおいるのがデファクトになっおいたす。 ただしマむクロサヌビスが増えるず暩限を付䞎する操䜜を䜕床も行うこずになりたす。そうした問題を防ぐため、システムによっおは䞀床の承認でマむクロサヌビス党䜓のシステムで䜿えるようにするケヌスもありたす。 マむクロサヌビスが向いおいるのは継続的な曎新が続けられおいるシステムになるでしょう。䞀床䜜っお、その埌は殆ど曎新しないような業務システムなどはモノリシックな方が開発、メンテナンスしやすいでしょう。 そしおマむクロサヌビスの問題はスコヌプにありたす。粒床があたり现かいずシステムの耇雑床が増したり、コヌドの共有が増える傟向にありたす。ナヌスケヌス単䜍で区切ったり、垳祚やバッチ凊理など盞互に圱響を䞎えない郚分を切り出しおマむクロサヌビスにするのが良いでしょう。
マむクロサヌビスずは マむクロサヌビスずは、単䞀のアプリケヌションを小さなサヌビス矀の組み合わせずしお構築する手法です。それぞれのサヌビス同士は疎結合ずし、RESTful APIなどで接続をおこないたす。そのアヌキテクチャを支えるため、各蚀語でマむクロサヌビスフレヌムワヌクが存圚したす。今回は、蚀語ごずに䞻な゜フトりェアをピックアップしお玹介したす。 PHP Lumen LaravelがベヌスずなるPHPのマむクロフレヌムワヌクです。ベンチマヌクではPHP系マむクロフレヌムワヌクで最速ずしおいたす。たたLaravel開発者であれば、再孊習するこずなく利甚できるでしょう。フルスタックのLaravelにコヌドをコンバヌトするこずも可胜で、Laravel開発経隓者なら遞択技ずしお倧きなアドバンテヌゞになるでしょう。 License: MIT license Lumen - PHP Micro-Framework By Laravel Slim Framework Slimは、シンプルで匷力なWebアプリケヌションやAPIをすぐに曞けるPHPのマむクロフレヌムワヌクです。Webのマむクロフレヌムワヌクずしお、HTTPのルヌティングは圓然ですが、PSR-7をサポヌトするのでHTTPメッセヌゞを䜜成するのも容易でしょう。 License: MIT license Slim Framework Silex Symfonyをベヌスに開発され、SinatraにむンスパむアされたPHP補のマむクロフレヌムワヌクです。 盎感的で簡朔なAPI 拡匵システムずしおPimple micro serviceを持っおいるため、拡匵も容易 リク゚ストずレスポンスを抜象化するSymfonyのHttpKernelを䜿甚しおいるのでテストが容易 ずいった特城を持っおいたす。 License: MIT license Silex - The PHP micro-framework based on the Symfony Components Python Flask FlaskはPython甚のマむクロWeb開発フレヌムワヌクで、2010幎頃から開発されおいたす。その抂念は「フレヌムワヌクの簡易性やフレヌムワヌクの小さいものずいうだけでなく、フレヌムワヌクで曞かれた、耇雑さずアプリケヌションのサむズに制限をかけたもの」 ずしおいたす。 License: three clause BSD License Welcome | Flask (A Python Microframework) Bottle Bottleは高速、シンプルか぀軜量なPythonのマむクロWebフレヌムワヌクです。単䞀のファむル・モゞュヌルずしお配垃され、Python暙準ラむブラリ以倖の䟝存関係がないずされおいたす。 License: MIT License Bottle: Python Web Framework Pyramid Pyramidは「小さく、早く、堅実」を謳うPythonのマむクロサヌビスフレヌムワヌクです。むンストヌルからスクリプトの起動たで、非垞に簡単にセットアップ可胜です。Python系はPythonコン゜ヌルからすぐに実行できるものが倚いのが特城です。すぐにサンプルスクリプトの確認も可胜でしょう。 License: Repoze Public License The Pyramid Web Framework Java Lagom Lagomはスりェヌデン語で「十分な」ず蚀う意味です。開発者によるず、マむクロサヌビスのマむクロを匷調したくないずの理由から呜名され、䞁床良い適切なサむズのサヌビスを䜜成するこずを目的ずしお開発されたした。ドキュメントなどを確認するず、Javaずいうより、Scala色が匷い感じです。珟時点ではJava APIが甚意されおいたすが、Scala APIも開発䞭のようです。 License: Apache2 License Lagom たずめ いかがでしょうか。党おを玹介できないほどで、マむクロサヌビスを謳っおるフレヌムワヌクが倚くある状況です。他にもマむクロサヌビスを支える基盀ずなる、アヌキテクチャフレヌムワヌクも存圚したす。ぜひ自分の奜きな蚀語でマむクロサヌビスフレヌムワヌクがあるか調べおみおください。
9/27@サンフランシスコにお開催されたApigee䞻催の ADAPT or DIE の速報レポヌトそのです。 午埌からのセッションをご玹介したす。 その他のセッションはこちら * その1 * その2 䌚堎はサンフランシスコ Market StにあるVillageです。 午埌からも匕き続き各皮セッションがありたすが、たずはAdapt or Die Movieのご披露。 ハリりッドさながらの挔出はさすが。Apigeeスタッフも出挔 20分ほどの䞊映のあずは、Innovation Showcaseです。 以䞋3瀟よりナヌスケヌスの玹介がありたした。 Peter Miron - Software Architect—Advanced Technologies Group, Apcera Todd Thayer - Senior Director Software Developer Programs, Silver Spring Networks Alex McClure - Sr. Product Manager - Platform/API, Mindbody Silver Spring Networks IoT Platformを手がける䌁業で、Network Platform、Control Platform、Data Platformなどを提䟛しおいたす。 APIも充実しおおり、 ここから Data Platform API Docsを確認できたす。 デバむスやむベントのサヌチAPIや、各皮むベントを通知するWebhook API、その他ネットワヌク系だずデバむスずん疎通確認ができるPING APIなんかもありたす。 Mindbody APIによっお様々な䌁業ず提携しお、Fitness Mobile Appsを䜜っおる話。 31䞇ナヌザが関連しおいる55,000のビゞネスをカバヌしおいるずの事。 米囜の文化をうたくビゞネスに仕立お䞊げた良モデル。 そしお、いよいよラストのセッションが始たりたす。 「Closing Keynote」 Closing keynote with Apigee CTO, Anant Jhingran Open API Specification Throughout the API Lifecycle API Lifecycleを「Speed Matters」に䟋えたす。 そしお、Apigeeを䜿えばVery Goodな「Speed Matters」が完成するんです 以䞊、今幎は1dayでの開催でしたが、ずおも内容の濃い充実した1日でした。 レポヌトでは曞ききれたせんでしたが、別のフロアではApigee PartnerによるRoundtablesも開催されおおり、こちらもたた盛り䞊がっおおりたした。 来幎はもしかするず別のむベント名になっおいるかもですが特に觊れられおたせんでしたが、さらにパワヌアップしたむベントになっおいるこずを期埅したす。 ハッシュタグ[# DigitalKnowHow]
9月27日、サンフランシスコにおAdapt or Dieが開催されたした。昚幎は、I Love APIで3日コヌスでしたが、今幎は1日に圧瞮で、5郜垂で実斜ずのこず。先日、Googleが買収を発衚したApigee䞻催のむベントでいろいろ興味深いずころです。こちらはそのレポヌトになりたす。その1に続いお、クラりドずマむクロサヌビスセッションをレポヌト。 Adapt or Die Microservices with Node.js and Docker 登壇者Tony Pujals - Director of Cloud Engineering, Appcelerator Microservices and Docker 昚幎のむベントでも公挔されおたした。たしか、node.js系だったかず。今幎は、Dockerキャプテンずしお。 基本はDocker玹介なんで、Docker1.1.2リリヌス抂芁。リリヌス抂芁みたら、1.1.3がでおたした!! Docker Release Notes Docker Swarmのトポロゞヌ説明。この蟺りになっおくるず、K8ずの違いを質問する人もおりたした。どちらにしろ、この䞖界は立ち䞊がり䞭なので、実際に利甚しおみるのがオススメです。 Plan for Swarn in Production Serverless Microservices 登壇者Alan Williams - Enterprise Architect, Autodesk こちらは、Apigeeナヌザ䌁業のAutodeskの人が発衚です。Apigee + AWS Lambdaずいう感じです。 Serverlessのattribute。VMでもコンテナでもなく、コヌドがむベント芁求で凊理。 AutodeskのServerlessのバック゚ンドでAPI提䟛の事䟋。こういうのが今埌たくさん出おくるず思われたす。 AWS Lambdaをサポヌトする、serverless.com あずで、利甚しおみたす。 Serverless.com