質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.35%

  • PHP

    15175questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メインサイトとAPIは別々のアプリケーションとして作るべきでしょうか?

解決済

回答 3

投稿 2017/12/01 12:19

  • 評価
  • クリップ 4
  • VIEW 1,317

workr

score 67

それぞれドメインの異なる各店舗ごとのウェブサイトと、それらをひとまとめにしたグループサイトがあり、各店の新着情報やスタッフブログなどの情報はグループサイト側の1つの管理画面で登録し、APIを使って各店舗個別のウェブサイトに情報を提供しています。
グループサイトには各店舗の情報をまとめて一覧表示する機能があります。

データベースは一つで、グループサイトとAPIはLaravelを使って一つのアプリケーションとして作ってあります。
グループサイト自体はAPIから情報を取得せずにデータベースから直接取得しています。

店舗ごと個別のサイトはデータベースを直接読まずにAPIからのみデータを取得しています。

グループサイトとAPIはサブドメインで別れていて example.com, api.example.com のようになっているので切り分けるのは難しくありません。

モデルやデータベースの接続情報は使いまわせるのでその点はいいのですが、APIにとっては無関係の処理があったり、将来的にAPIのみ軽量なフレームワークに変更するなどのアップデートができなくなるなどのデメリットもあります。

一般的にこういったサイトを構築する際、将来のことを考えて API のアプリケーションと公開サイトのアプリケーションは別々のアプリケーションとして組むべきなのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+10

APIを分けることのメリットもデメリットも、マイクロサービス的なことでしょうが、
ここであらためて、整理して述べておきましょう。

分けるメリットを一言でいうと、APIが安定していれば、外部APIのように使えることです。
つまり、外部化によって、(Web)APIのことを忘れていても使える、ということです。
問題の特定も、復旧も楽になります。作成コストは増えますが、修正コストが減ります。

負荷が増えたらサーバを増やせばいいかというと、巻き込まれて落ちるリスクは残ります。
だから、バーチャルホストなどで区切れても、リアルな分離をする意味も残ります。
規模が大きくなるほど、障害耐性は無視できなくなってくるでしょう。

また、ご質問でも触れられていますが、APIを軽量フレームワークにするなど、
技術を分けられるので、API分離による軽量化などのメリットがあります。


もちろんデメリットもあります。

技術を分けられるということは、別々の技術をカバーする必要があります。
API分離による軽量化もあれば、API分離による(通信の)オーバーヘッドもあります。

またたとえば、分けると二重化する、二度手間やコピペになるおそれはあります。
ただそれは、一体化しているため、個別に変更しにくくなることの裏返しです。


APIを別に分けるかどうか、一言でいうと規模によります。
一般的に大規模になるほど、分けた方がメリットが大きくなります。
分業とか分社とか、分化していくイメージです。

分ける目安は何か、というのも述べておきます。

これは変更が目安になります。グループサイトとAPIと、
バラバラに変更することが増えてきたら、
責務が別になってきている徴候なので、分離する時です。

ご質問は、「将来的」に備えたいということでしたが、
将来の拡張や、負荷の増大、それによる修正に、
どれくらい(不)確定性があるかどうかで決まります。

もし、規模を拡張することが決まっているなら、決定は早い方が良いですが、
不確定だと早すぎる最適化になり、決定を遅延した方が良い場合もあります。

投稿 2017/12/02 06:55

編集 2017/12/02 07:37

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

私の直感としては、分けたほうが良いだろうなとは思います。
サービスが死んだ時の復旧も楽ですし、不具合出た時も特定が楽ですからね。

でも、yambejpさんの仰るように一本化するメリットも納得できる理由が多く、
実際には好みできっぱりわかれるでしょうね。
一本化側の視点で予想される反論一覧はこんな感じ、

  • 負荷増えたらサーバーまるっと増やしてロードバランシングすればいいじゃん
  • 分けるとModelやスキーマの辺りを二重に書くことになってコピペになるぞ
  • 将来的にAPIのみ軽量なフレームワークに変更するならLarabelの現行API殺すことになるから一緒じゃん、
    分離したいなら何時でもNginxやApacheでバーチャルホスト毎に区切れるでしょ
  • サービス開始時は実装がコロコロ変わるから落ち着いてから分離しろよ、今は一本化の方が良いって!

私には明確に分けるべきだと納得させられる回答が出せないので、
どっちでも良いですという日和的な結論で〆ます。

投稿 2017/12/01 14:52

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

検索条件や結果がほぼ同様ならわけて別々にするのはデメリットが多いでしょう
UIだけ変えて処理自体は一本化したほうが運用は楽だと思います。
ただしapiが不特定多数からアクセスをされる前提なら
api側の負荷が高くなる可能性があります。(また逆もあり)
webサイトかapiかどちらかに多くリソースをわり当てたいもしくは
お互いに足を引っ張り合いたくないなら構造を分けたほうがいいでしょう

投稿 2017/12/01 12:31

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.35%

関連した質問

同じタグがついた質問を見る

  • PHP

    15175questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。