web-dev-qa-db-ja.com

APIとフロントエンド-バックエンドの違い

「標準」のビジネスWebサイトを作成しようとしています。 「標準」とは、このサイトがフロントエンド、バックエンド(ものを処理するため)に通常のHTML5、CSSおよびJavaScriptを実行し、データベースにMySQLを実行することを意味します。これは基本的なCRUDサイトです。フロントエンドは、データベースに保存されているものをすべて作成します。バックエンドは、ユーザーが入力したものをデータベースに書き込み、何らかの処理を行います。ほとんどのサイトと同じように。

コーディングを開始するためにGithubリポジトリを作成するときに、フロントエンドバックエンド、の違いを理解していないことに気付きました[〜#〜] api [〜#〜]。私の質問を言い換える別の方法は次のとおりです:APIはこの絵のどこにありますか?

詳細と質問のリストを作成します。実際の質問が何であるかがよくわかるので、具体的な質問がわからないので、わかりやすくします。

さらに詳細:

  • Model-View-Controllerパターンを試してみたいと思います。これにより質問/回答が変わるかどうかはわかりません。
  • APIはRESTfulになります
  • バックエンドで自分のAPIを使用する を使用して、バックエンドが特別なクエリをチートして呼び出すことを許可するのではなく、このスタイルはより一貫していると思います。

私の質問:

  • フロントエンドは、APIを呼び出すバックエンドを呼び出しますか?または、フロントエンドはバックエンドを呼び出すのではなく、APIを呼び出すだけですか?
  • バックエンドは単にAPIを実行し、APIはバックエンドに制御を返しますか(バックエンドはタスクを委任する究極のコントローラーとして機能します)?

フロントエンドバックエンドと並んでAPIの役割を説明する長く詳細な回答が推奨されます。答えがプログラミングのモデル(Model-View-Controllerパターン以外のモデル)に依存している場合は、APIの他の考え方について説明してください。ありがとう。私はとても混乱しています。

24
Jason

APIという用語が多くのWeb開発者によって誤用および乱用されている方法に混乱していると思います。

  • APIは、アプリケーションプログラミングインターフェース、つまり、異なるシステム(または同じシステムの一部)間の公式に指定されたインターフェースを意味します。
  • しばらく前に、WebスタートアップがWebサービスAPIを介して内部データの一部にパブリックアクセスを提供することが大きなものになりました。通常、RESTとJSONを使用して、サードパーティの開発者がWeb開発者は、具体的に(そして唯一)「公的にアクセス可能なWebサービス」を意味する「API」という用語を使い始め、その実装を含めるために誤用しました。
  • フロントエンドとバックエンドの観点から、このWebサービスAPI(およびその実装)バックエンドです。公開されているものもあれば、フロントエンドだけがアクセスできるものもあります。
  • これの別の名前は「サービス層」です。つまり、それをコード化します
    • フロントエンドが呼び出すサービスを表します
    • 表示ロジックは含まれていません(結局のところ、これがフロントエンドの仕事です)
    • 単純なCRUDアクションよりも抽象的で粗い(1つのサービス呼び出しは複数のCRUDアクションを伴うことが多く、データベーストランザクション内で実行する必要があります)。
    • アプリケーションのビジネスロジックが含まれています
27

「典型的な」ウェブサイトのアーキテクチャを、「フロントエンド」と「バックエンド」の両方でスケッチしてみましょう。また、これはウェブサイトであるため、明示的に「クライアント」も用意します。 (ブラウザのJavaScriptがサーバー上のMySQLを直接呼び出す方法がないためです。)

明確にするために、使用している用語は次のとおりです。

  • Client:HTML5準拠のブラウザ、特にそれを操作するためにロードされたDOMとJavaScript.
  • フロントエンド:PHP要求された個々のページといくつかの両方を含む、DOMが指しているサーバー= AJAXスタイルのXMLまたはJSONアクセスポイント。
  • バックエンド:MySQLが実行されるデータベースサーバー。

適切に設計されたプログラムの場合、[これらの各コンポーネントには、他と通信するためのプライベートAPIがあります。 "フロントエンド" PHPコードは、任意のSQL SELECTステートメントを直接発行せず、ストアドプロシージャ、事前に許可されたSQL、または個別のPHPの完全に異なるインスタンスへの呼び出しPHP実行バックエンドサーバー上で。これらのストアドプロシージャまたは個別のHTTP呼び出し自体がAPIです。

設計の不純さを考慮に入れても、定義は変わりません。 PHPファイルがSQL文字列を直接書き込み、MySQLに送信する場合、IT IS STILL AN API、非常に珍しいものではありますが、繰り返すことはほとんどありません。

AJAX voodooをまったく使用せずに、フロントエンドphpを完全に同期させることは完全に可能です。同じ外部PHP関数を同期ファイルの場合、クライアント側のバージョンと同じAPIを使用していると見なすことができますが、ここで「API」という用語を使用すると、実際の明確さが得られない場合があります。

アプリケーションプログラミングインターフェース としてのAPIは、結局のところ、実際には1つのプログラムが独自のプロセスの外で呼び出すたびに]を指します。上記のAJAX/PHP/MySQLまたはMS Access/SQL Serverのように、フロントエンドとバックエンドの両方を持つプロジェクトでは、他に理由がない限り、お互いをどのように呼び出すかを明示的に指定する価値があります。何かが壊れたときにどこを見ればよいかを簡単に知ることができます。

(そしてpublic APIのトピックは完全に別のものです。上の例では、クライアントに表示されるURLのみが「public API」です。それ以外の場合は、本質的には「プライベート」です。自分の制御が及ばないコードが内部APIを呼び出すことは想定されておらず、そのような結果を完全に拒否するか、将来そのようにする権利を留保します。

11
DougM