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

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

ただいまの
回答率

89.98%

WEBアプリケーションの構築でAPIを使用する?

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,844

Buakaw

score 221

SNSのシステムなどを構築しようと考えています。

cakephpなどのフレームワークで作成しようと思いますが、
いろんな方に相談した結果、サーバサイドのデータの通信はAPIを構築して行うのが、ゆくゆくスマフォアプリも利用するのに便利でかつ直接DBよりセキュリティ的に良いということでした。
(APIドキュメントはapiaryを想定。)

イメージ説明

私もまだまだ経験が浅いですが、一般的にアプリケーションはDBサイドはAPIで構築するのでしょうか。
その際のメリット・デメリットを経験のある方よりご教授頂きたいです。

よろしくお願いします。。

/*以下追記です*/

ご回答ありがとうございます。
質問が抽象的すぎても申し訳ありません、以下のようなイメージの構築を想定しております。
サーバサイドはcakephpなどを用いての構築です。
また、iPhone側にブラウザなどが増える想定です。

デスクトップアプリなど、WEB以外も視野に入れた場合API構築でないとDBから値を引き出せない認識ですが、それは間違えはないですか?

API仕様

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

0

MVCだったらModelからDBを触ればいいと思いますよ
触り方には

  • SQL文を書かないとはどういうことだ
  • ORMに任せればいいじゃん
    など諸説あるようです

オンプレミスのネットワーク内のみならともかく、それ以外でクライアント側から直接DBを触るのは無い話ですね

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

「DBサイドはAPIで構築する」という定義次第かとは思いますが、

仮に
「DBサイドはAPIで構築しない」とした場合に

  • iPhoneアプリ(もしくはほかのクライアント)からインターネット経由で直接DBにアクセスする
    事を想定されているのであれば、少なくともSNSというアプリケーションでは

「アクセスする人がシステム管理責任者に限定されている」という状況以外では「あり得ない」です。

理由としては、クライアント側から投げられるクエリの正当性をチェックするような仕組みは一般的なDBには存在しておらず、クライアント側が危険なクエリを投入した場合でも一切チェックが出来ないためです。

「DBサイドはAPIで構築する」について、想定されている実装を出来るだけ具体的に提示頂ければより適切な回答が得られると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

意図している答えになっているかどうか解りませんが、個人的な見解を書いておきます。

API はシステムに対する規格化 / 標準化した操作手段を提供することになるわけですが、API を準備する場合は、抽象的な概念レベルで『システムの在り方』や『構成要素とレイヤー』を把握し『外部へ提供する機能』を実現するために『必要な操作』を可能な限り明確化すべきです。ここが曖昧だと、似たようなモノや使いにくい機能が量産されることでしょう。

DB側のデータ操作などに対して API を構築するのは『システム内部の共通ライブラリ整備』という意味合いで、体系的な操作を準備することはよくあると思います。ただし、これは WebAPI ではない(このライブラリに対する wrapper を用意して WebAPI にするのはアリ)ですね。しかしながら、このレイヤーであれば DB自体の機能が使いやすいですし、サーバ間連携をしたいのであれば、API 関係なく DB上でデータ渡しをする構成で解決する方法なども考えられると思います。

WebAPI などの外部連携用インターフェイスの整備は一般的に AP(アプリケーション)側の話になると考えます。DB上に WebAPI を整備することは製品によっては(Oracle など HTTP に対する処理を実際 PL/SQL で15年以上前に私自身書いたことはあるので)技術的にできなくはないですが、今の時代に使うメリットはほぼ無いでしょう。

API がセキュリティ的に良いかどうかは設計次第です。例えば、必要だからといって DB に対して短絡的に書込操作ができる機能を提供した場合、認証や権限による制限などを併せて用意していなければ、外部から無制限に書込できてしまいます。これが許されるシステムの場合は問題ないわけですが、セキュリティ的に大きな穴だと判断されてしまうシステムもあるでしょう。また、データの取出など読取に関して際限なく引き出せると、通信などの負荷が全体的にかかるような事も考えられるため、場合によっては件数制限を加える必要があるかもしれません。このことから解るように、前提や設計が曖昧な状態で WebAPI を使っているから強固なシステムだ。などと単純に判断できるものでは無いと考えます。

WebAPI 自体は後から準備することも可能です。もし、外部のクライアントなり連携先システムとの同時開発が必要であれば、固定的なレスポンスなりを返す stub だけ用意して対処することも可能でしょうし、呼び出し側で工夫することも可能ですから、この辺は自分達にあった開発スキームを適用すれば良いでしょう。

あと、将来的な利用の想定だけして準備する。というのは余程の余力や経験、先見性がない限りしないほうが良いでしょう。実際の需要や必要な機能の差異は案外大きいものです。DB 操作用の WebAPI を準備したと仮定して、WebAPI は基本的に外部連携用のため、わざわざシステム内部から叩くと無駄な通信も発生しますからシステム自身で使うメリットもありません。整備するかどうかを判断する一つの指針として、明確な連携先と使い方/使われ方が想定できるかどうか?というのが使えるかもしれませんね。

以上、ご参考になれば幸いです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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