36
Remixing つつつつつ つつつつつつつ ~API つつつつつ ~ 株株株株株株株株株株株 株株 株株 (@y_takky2014) 1

2015/06/27 Remixing つらくないメディア間連携

Embed Size (px)

Citation preview

Page 1: 2015/06/27 Remixing つらくないメディア間連携

Remixing

つらくないメディア間連携~API を使えばね ~

株式会社オールアバウト吉田 拓実

(@y_takky2014)

1

Page 2: 2015/06/27 Remixing つらくないメディア間連携

Remixing

2

自己紹介

吉田拓実 (Yoshida Takumi)@y_takky2014 https://twitter.com/y_takky2014http://qiita.com/takky

2 年間でやってきたことサーバサイド各種検証 (CMS/MySQL/infinity scroll)

各種フロントアプリケーション→→社内向けシステム

Copyright 2015 All About,inc.

API

Page 3: 2015/06/27 Remixing つらくないメディア間連携

Remixing

3

アジェンダ

複数メディアの開発者の悩み

複数メディアを連携した新機能作成時の悩みと解決法

All About の API 活用事例

API 実装時の工夫点

API を使った今後Copyright 2015 All About,inc.

Page 4: 2015/06/27 Remixing つらくないメディア間連携

Remixing

4

複数メディアの開発者の悩み

Copyright 2015 All About,inc.

Page 5: 2015/06/27 Remixing つらくないメディア間連携

Remixing

5

1. システム構成がバラバラ

Copyright 2015 All About,inc.

DB

フレームワーク

言語

Page 6: 2015/06/27 Remixing つらくないメディア間連携

Remixing

6

メディア Bcontents

hogehoge#hugahuga#img1link1

プログラムで本文組み立てが必要

Copyright 2015 All About,inc.

2. データの持ち方がバラバラ

メディア Acontents<h1>hogehoge</h1><h2>hugahuga</h2>testtesttesttest<br><img src=“test.jpg”><a href=“allaabout.co.jp>allabout </a>ユーザに表示されるものがそのまま入っている

DB に入っている記事の全文データ

Page 7: 2015/06/27 Remixing つらくないメディア間連携

Remixing

7

つらいCopyright 2015 All About,inc.

Page 8: 2015/06/27 Remixing つらくないメディア間連携

Remixing

8

複数メディアを連携した新機能作成時の悩みと解決法

Copyright 2015 All About,inc.

Page 9: 2015/06/27 Remixing つらくないメディア間連携

Remixing

9

複雑化する要件

Copyright 2015 All About,inc.

エンタメ系のコンテンツを充実したいから、

メディア A,B,C,D からエンタメっぽい記事を

新着で集めたものを作って !エンタメ系のコンテンツは、恋愛 / グルメ / ホビーのカテゴリに属するものでお願いしま

す。

広告記事は無しでよろしく!

Page 10: 2015/06/27 Remixing つらくないメディア間連携

Remixing

10

これらを連携しようと思ったら

Copyright 2015 All About,inc.

各メディアの DB に直接接続して

新機能のプログラムでクエリ書いて

データ作成しよう

Page 11: 2015/06/27 Remixing つらくないメディア間連携

Remixing

11

直接 DB 接続する

Copyright 2015 All About,inc.

Conncect B;dataB = B.getData();~~~~~~~~~~~~~~

サンプルコード

新機能

DBConnect/getData

A

B

C

DConnect A;dataA = A.getData();

Page 12: 2015/06/27 Remixing つらくないメディア間連携

Remixing

12

直接接続時のデメリット

1 つの DB に接続できないとシステムダウン

耐障害性が低い

メディア数分 DB 接続が必要実装が複雑化

拡張性影響範囲調査が必要仕様の把握が難

Copyright 2015 All About,inc.

Page 13: 2015/06/27 Remixing つらくないメディア間連携

Remixing

13Copyright 2015 All About,inc.

各メディアの batchでデータを作成してそれを migration して

持ってこよう

Page 14: 2015/06/27 Remixing つらくないメディア間連携

Remixing

14

Application A batch

Batch でデータ作成

Copyright 2015 All About,inc.

A

NEW

Connect/getData

WriteC

Connect/getData

Write

Connect/getData

D

Write

New Application

front

Read

Application B batchApplication D batch

Application C batch

Writ

e

B

Connect/getData

Page 15: 2015/06/27 Remixing つらくないメディア間連携

Remixing

15

Batch のデメリット

耐障害性は上がるデータを前もって準備しておくから

メディア数分の batch 実装再実装が必要なことも

影響範囲の調査は必須

Copyright 2015 All About,inc.

Page 16: 2015/06/27 Remixing つらくないメディア間連携

Remixing

16

じゃあどうしよう ?

Copyright 2015 All About,inc.

Page 17: 2015/06/27 Remixing つらくないメディア間連携

Remixing

17Copyright 2015 All About,inc.

API を使おう !

Page 18: 2015/06/27 Remixing つらくないメディア間連携

Remixing

18

API でデータ取得

Copyright 2015 All About,inc.

API

B

D

A

C

DB

API Request

Get Data

Return Data

Response Data

Page 19: 2015/06/27 Remixing つらくないメディア間連携

Remixing

19

API のメリット

データの持ち方を知らずに使用可能データ構造の考慮がいらない。

影響範囲の特定が容易API のみの改修で OK

疎結合化システム間の結びつきが弱くなる耐障害性 UP

拡張性 UP

Copyright 2015 All About,inc.

Page 20: 2015/06/27 Remixing つらくないメディア間連携

Remixing

20

All About の API 活用事例

Copyright 2015 All About,inc.

Page 21: 2015/06/27 Remixing つらくないメディア間連携

Remixing

21

API 使用した実例

タグページ

Copyright 2015 All About,inc.

http://allabout.co.jp/taglist/

Page 22: 2015/06/27 Remixing つらくないメディア間連携

Remixing

22Copyright 2015 All About,inc.

http://allabout.co.jp/gm/gc/450229/

記事に紐づくタグ

記事内容を解析特徴的なキーワードをタグとして表示

Page 23: 2015/06/27 Remixing つらくないメディア間連携

Remixing

23

記事タイトル

要約文

サムネイル

執筆者名・写真

Page 24: 2015/06/27 Remixing つらくないメディア間連携

Remixing

24

SELECTTag

タグページのシステム構成

Copyright 2015 All About,inc.

API

まとめ

Tag

記事

NewsDig

DB

API Request(Get 記事 Data)

API Response( 記事 Data)

SELECT 記事 Data

記事 Data

API Request(Get Tag)

TagAPI Response

(Tag)

Page 25: 2015/06/27 Remixing つらくないメディア間連携

Remixing

25

タグページの実装

記事情報を返却する API を実装

タグ情報を返却する API を実装

メディア間連携する場合は API他メディアの情報を Tag の DB に持たない

他メディアには影響されない

Copyright 2015 All About,inc.

Page 26: 2015/06/27 Remixing つらくないメディア間連携

Remixing

26

API 実装時の工夫点

Copyright 2015 All About,inc.

Page 27: 2015/06/27 Remixing つらくないメディア間連携

Remixing

27

返却形式の共通化

JSON 形式で返却

Data と Meta から構成

Copyright 2015 AllAbout,inc.

data: [{ article_id: 450229, article_title: "40 ~ 50 代のダイエットは「腕」をチェック! ", article_abstract: “40 ~ 50 代になり「痩せにくい」 ~", }],meta: { status_code: 200, status_msg: "OK"}

Page 28: 2015/06/27 Remixing つらくないメディア間連携

Remixing

28

ステータスコードの有効活用

HTTP のステータスコードを適切に設定

Copyright 2015 AllAbout,inc.

ステータスコード API 上の状態

200 OK API のレスポンスが正しく返却されている

400 Bad Request パラメータが不正

503 Internal Server Error DB や通信が起因で情報取得に失敗

Page 29: 2015/06/27 Remixing つらくないメディア間連携

Remixing

29

ドキュメント化

Qiita に記載API の叩き方やAPI の実装ガイドライン共有

Copyright 2015 All About,inc.

Page 30: 2015/06/27 Remixing つらくないメディア間連携

Remixing

30

ライブラリ化

API を叩く部分の実装を共通化サーバサイド実装者は、関数呼び出しで使えるように

API 実装者とサーバサイド実装者が異なってもスムーズに連携

Composer のようなパッケージ管理システムの利用

Copyright 2015 All About,inc.

Page 31: 2015/06/27 Remixing つらくないメディア間連携

Remixing

31

※ここからは、個人的な願望になります。会社の方針とは関係ありません。

API を使った今後

Copyright 2015 All About,inc.

Page 32: 2015/06/27 Remixing つらくないメディア間連携

Remixing

32

API を使って解消出来るところ

現在はベタ書きサービスの追加 /削除毎にリリース発生調査・リリースがほとんどを占める

API 化すると削減DB にデータ入れ込んで終了

Copyright 2015 All About,inc.

調査47%リリース

33%

実装20%

Page 33: 2015/06/27 Remixing つらくないメディア間連携

Remixing

33

サービスすべてを API 化

各メディアでのデータ取得も API に使い回しが容易に

Copyright 2015 AllAbout,inc.

Page 34: 2015/06/27 Remixing つらくないメディア間連携

Remixing

34

まとめ

API を使うことでシステムを疎結合化システム間の依存性が少なくなる改修高速化使い回しが容易

工夫により実装・利用の容易化共通仕様の策定ドキュメント化ライブラリ化

Copyright 2015 All About,inc.

Page 35: 2015/06/27 Remixing つらくないメディア間連携

Remixing

35Copyright 2015 All About,inc.

つらくない!!!

Page 36: 2015/06/27 Remixing つらくないメディア間連携

Remixing

36

ご清聴ありがとうございました

Copyright 2015 All About,inc.