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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

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

Q&A

解決済

3回答

6486閲覧

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

workr

総合スコア158

PHP

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

3グッド

5クリップ

投稿2017/12/01 03:19

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

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

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

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

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

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

hsk, LLman, bananacoffee👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

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

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

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

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


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

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

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


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

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

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

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

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

投稿2017/12/01 21:55

編集2017/12/01 22:37
LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

  • 負荷増えたらサーバーまるっと増やしてロードバランシングすればいいじゃん
  • 分けるとModelやスキーマの辺りを二重に書くことになってコピペになるぞ
  • 将来的にAPIのみ軽量なフレームワークに変更するならLarabelの現行API殺すことになるから一緒じゃん、

分離したいなら何時でもNginxやApacheでバーチャルホスト毎に区切れるでしょ

  • サービス開始時は実装がコロコロ変わるから落ち着いてから分離しろよ、今は一本化の方が良いって!

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

投稿2017/12/01 05:52

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2017/12/01 03:31

yambejp

総合スコア114814

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問