Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Apiのことはすべてシーマンが教えてくれた

4,466 views

Published on

Microservices Meetup vol.5の発表資料です。
https://microservices-meetup.connpass.com/event/52516/

Published in: Engineering
  • Be the first to comment

Apiのことはすべてシーマンが教えてくれた

  1. 1. API のことはすべてシーマンが教えてくれた @charlier_shoe
  2. 2. 自己紹介 早川 博(はやかわ ひろし) @charlier_shoe • 日本オラクルのプリセールス・エンジニア - 製品選定のコンサルティング、アーキテクチャ設計など、販売活動の 技術的支援がミッション - Java SE / Java EE / WebLogic / PaaS… • (ErgoDoxユーザー)
  3. 3. 自己紹介 シーマン(しーまん) @SEAMANBOT • 魚の胴体に、人の顔を持った姿(ギルマン形態時)の生物 • 古代エジプトの壁画ある「偉大なる神の使い」という説あり • 著書: • 「シーマン語録」/ダイヤモンド社 ・ 「シーマン語録〈2〉」/幻冬舎 • ラジオ出演: • 「シーマンのラジカントロプスA.D.2000 〜禁断のペット・禁断の生放送〜 (アール・エフ・ラジオ日本)」
  4. 4. Hey Jim, can you add that column to the database before lunch? あんた、あっちのチームの 人でしょ…。
  5. 5. “ ほどよい距離感を保つこと。 これって、サービス精神なんだよ。 職場の人間関係について悩んでいるユーザーに対する助言 ― シーマン ―
  6. 6. あなた チームメンバー • 目標 :共通の目標をもつ • コミュニケーション :対面で、いつでも • サービスのリリース時期 :同じ いろいろな距離感
  7. 7. あなた 他サービス担当の 開発者 いろいろな距離感 • 目標 :上位の目標を共有。短期の利害は一致 しないことも • コミュニケーション :テキストが多いが対面も可 • サービスのリリース時期 :合わせる場合は調整が必要
  8. 8. あなた フロントエンドの 開発者 いろいろな距離感 • 目標 :上位の目標を共有。短期の利害は一致 しないことも • コミュニケーション :テキストが多いが対面も可(組織による) • サービスのリリース時期 :合わせる場合は調整が必要(組織による) なぞのそしき !
  9. 9. あなた 一般の開発者 別のグループ会社の人 いろいろな距離感 • 目標 :目標を共有しない • コミュニケーション :ドキュメントを見て仕様を確認。問い合わ せは然るべき窓口経由 • サービスのリリース時期 :違う。合わせたくても合わせられない なぞのそしき !
  10. 10. “ ほどよい距離感を保つこと。 これって、サービス精神なんだよ。 職場の人間関係について悩んでいるユーザーに対する助言 ― シーマン ― マイクロ
  11. 11. APIに求められること どんな使い方をさ れるかわからない … 使いづらくて苦労 させるかも。使って くれないかも 実装を変更できな くなるかも 攻撃にあったらど うしよう 大量に呼び出しさ れたら落ちたりし ないか?
  12. 12. APIに求められること 1. コンシューマーにとって扱いやすい 2. 疎結合 3. 利用量監視 4. 流量制御 5. セキュリティ
  13. 13.  よく定義されたAPI • 正常系/異常系、パラメータによるバリエーション • ライフサイクル(バージョンニング)ポリシー • ドキュメンテーションのわかりやすさ  シンプル  オープンな仕様に基づく  すぐに試せる 参考) 「コンシューマーにとって扱いやすい」 とはどういうこと?
  14. 14. マイクロサービスで作ってみよう サービス DB DB DB サービス サービス {} REST 非同期メッセージング pub sub サービス 認証 監視流量 制御 認証 監視流量 制御 認証 監視流量 制御 認証 監視流量 制御 DB {} REST クライアント {} REST {} REST {} REST API API API API
  15. 15. マイクロサービスで作ってみよう サービス DB DB DB サービス サービス {} REST 非同期メッセージング pub sub サービス DB {} REST クライアント {} REST {} REST {} REST API API API API API Gateway 流量制御、認証、監視 API API API API
  16. 16. 必要なデータだけ送るようにできない? 2つ呼ばないとデータが揃わないくせに、他 の余分なのがたくさんあるんだっつーの。 パフォーマンス出ねぇだろうが 無関係なデータまとめて送るなんて、美しくない…。 それに、そんなの他の人は使わないでしょ?
  17. 17. “ おまえの未来を最もせばめてい る原因、それは「面倒くさい」と思 う自分だよ 中年のビジネスマンとの仕事の会話にて ― シーマン ―
  18. 18. クライアントのAPI呼び出しを仲介するレイヤー クライアントに最適化した形式に変換 • データの最適化 • 複数API呼び出しの集約(API aggregation) Backend for Frontend
  19. 19. マイクロサービスで作ってみよう サービス DB DB DB サービス サービス {} REST 非同期メッセージング pub sub サービス DB {} REST クライアント {} REST {} REST {} REST API API API API APIゲートウェイ 流量制御、認証、監視 API API API API BFF API変換/集約 スマートフォン タブレット APIAPI {} REST
  20. 20. ここからは宣伝です…。
  21. 21. API Gateway製品を近日リリース! https://cloud.oracle.com/ja_JP/api-platform/ API Platform Cloud Service
  22. 22. 設計 実装 デプロイ 管理 発見・利用 監視 API Platform Cloud Service の特徴 1. APIライフサイクルをサポートす る機能群 2. 環境を選ばずに利用可能 (オンプレミス/クラウド) 3. Apiary機能統合 API ライフサイクル
  23. 23. 設計 実装 デプロイ 管理 発見・利用 監視 デプロイ フェーズ  デプロイ先の自由  オンプレミス  3rd Party Cloud  Oracle Cloud  設計したAPIを選択した実行環境に 配布
  24. 24. アーキテクチャ Apiary.io API設計者 Identity Cloud Service API Platform Cloud Service Oracle Cloud API管理者 API実装者 Gateway管理者 {request} {response} ゲートウェイFW/LB サービス サービス サービス Oracle Cloud {APIs, Policies} 定期的に アウトバウンド・リクエスト {Analytics} {request} {response} クライアント 3rd Party Cloud On Premise API利用者 開発者 ポータル
  25. 25.  APIドキュメントを SwaggerやAPI Blueprintで記述  作成したAPIドキュメントは、開発者 ポータルにワンクリックで公開  APIのモックを自動生成 設計 実装 デプロイ 管理 発見・利用 監視 設計、発見・利用フェーズ 参考) Documentation Driven Contracts http://thoughtworks.github.io/pacto/patterns/documentation_driven/
  26. 26. In Documentation-Driven Contracts you want to make your documentation the source of truth for the contract. ・Create Contracts based on the documented structure ・Create sample requests for simulated consumers to test providers ・Create stubbed responses to test consumers
  27. 27. 開発者向けイベント開催決定! ”Oracle Code” Oracle Code http:// 東京開催は 5月予定!
  28. 28. https://developer.oracle.com/code

×