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

Preview:

Citation preview

Remixing

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

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

(@y_takky2014)

1

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

Remixing

3

アジェンダ

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

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

All About の API 活用事例

API 実装時の工夫点

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

Remixing

4

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

Copyright 2015 All About,inc.

Remixing

5

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

Copyright 2015 All About,inc.

DB

フレームワーク

言語

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 に入っている記事の全文データ

Remixing

7

つらいCopyright 2015 All About,inc.

Remixing

8

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

Copyright 2015 All About,inc.

Remixing

9

複雑化する要件

Copyright 2015 All About,inc.

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

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

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

す。

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

Remixing

10

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

Copyright 2015 All About,inc.

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

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

データ作成しよう

Remixing

11

直接 DB 接続する

Copyright 2015 All About,inc.

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

サンプルコード

新機能

DBConnect/getData

A

B

C

DConnect A;dataA = A.getData();

Remixing

12

直接接続時のデメリット

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

耐障害性が低い

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

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

Copyright 2015 All About,inc.

Remixing

13Copyright 2015 All About,inc.

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

持ってこよう

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

Remixing

15

Batch のデメリット

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

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

影響範囲の調査は必須

Copyright 2015 All About,inc.

Remixing

16

じゃあどうしよう ?

Copyright 2015 All About,inc.

Remixing

17Copyright 2015 All About,inc.

API を使おう !

Remixing

18

API でデータ取得

Copyright 2015 All About,inc.

API

B

D

A

C

DB

API Request

Get Data

Return Data

Response Data

Remixing

19

API のメリット

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

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

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

拡張性 UP

Copyright 2015 All About,inc.

Remixing

20

All About の API 活用事例

Copyright 2015 All About,inc.

Remixing

21

API 使用した実例

タグページ

Copyright 2015 All About,inc.

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

Remixing

22Copyright 2015 All About,inc.

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

記事に紐づくタグ

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

Remixing

23

記事タイトル

要約文

サムネイル

執筆者名・写真

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)

Remixing

25

タグページの実装

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

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

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

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

Copyright 2015 All About,inc.

Remixing

26

API 実装時の工夫点

Copyright 2015 All About,inc.

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"}

Remixing

28

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

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

Copyright 2015 AllAbout,inc.

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

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

400 Bad Request パラメータが不正

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

Remixing

29

ドキュメント化

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

Copyright 2015 All About,inc.

Remixing

30

ライブラリ化

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

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

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

Copyright 2015 All About,inc.

Remixing

31

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

API を使った今後

Copyright 2015 All About,inc.

Remixing

32

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

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

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

Copyright 2015 All About,inc.

調査47%リリース

33%

実装20%

Remixing

33

サービスすべてを API 化

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

Copyright 2015 AllAbout,inc.

Remixing

34

まとめ

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

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

Copyright 2015 All About,inc.

Remixing

35Copyright 2015 All About,inc.

つらくない!!!

Remixing

36

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

Copyright 2015 All About,inc.

Recommended