フレームワークを使用して多くの作業を行うことができますが、内部で行われることは魔法ではありません。ある意味で、URIはいくつかのデータベーステーブルにマップされます。それらは特定のディレクトリ構造を参照していませんが、リソース間の階層関係を説明しようとします。
たとえば、大学をモデル化しているとしましょう。データベース内の要素は、学部またはコースの2つのテーブルのいずれかに格納されます。学部テーブルは、法学部、医学部などを説明する行で構成されています。一意のfaculty_id列があり、次に必要なものを説明する列があります。Coursesテーブルには、コースがどの学部に属しているかを示すために、一意のcourse_id列と外部キーfaculty_id列があります。
このAPIを設計するRESTfulな方法は次のようになります
/faculties
すべての学部のリストを取得するには、SELECT * FROM Faculties
/faculties/2
特定の学部に関する情報を取得するには、SELECT * FROM Faculties WHERE faculty_id=2
/faculties/2/courses
特定の学部に属するすべてのコースを取得するには、SELECT * FROM Courses WHERE faculty_id=2
/faculties/2/courses/15
特定のコースを取得するには、それが実際に学部2に属している場合、SELECT * FROM Courses WHERE faculty_id=2 AND course_id=15
これの正確な実装は、選択したプログラミング言語(および場合によってはフレームワーク)によって異なりますが、ある時点で、データベースにクエリを実行する方法を選択する必要があります。これは明らかではありません。あなたはそれが意味をなすためにそれを注意深く計画する必要があります!
もちろん、データベースからの結果は、何らかの方法でエンコードする必要があります。通常はXMLまたはJSONです(ただし、他の表現も同様に問題ありませんが、一般的ではない場合があります)。
GET
これとは別に、SQLコマンド( = SELECT
、POST
= INSERT
、PUT
= UPDATE
、DELETE
= )と一致するように、4つの動詞を正しく実装し、DELETE
エンコーディングネゴシエーションを正しく処理し、適切なHTTP応答コードとその他の期待されるすべてのものを返すようにする必要があります。 RESTfulAPIの
最後のアドバイスとして:これをきちんと行うと、モバイルアプリの設計が非常に簡単になります。私は本当にこれを十分に強調することはできません。たとえば、POST
リクエストでデータベースに表示されているとおりに完全なエントリを返す場合、正しいIDを使用してすぐに電話に保存でき、コンテンツをレンダリングする場合と同じコードを使用できます。GET
リクエストを使用してダウンロードされました。また、リクエストが成功したかどうかを知る前に、時期尚早に更新してユーザーをだますことはありません(携帯電話は接続を大幅に失います)。
編集:コメントであなたの質問に答えるために:APIの作成は芸術の一形態と見なすことができ、おそらく設計段階でのコーディングを伴うべきではありません。APIは意味があり、特定の実装に依存しないようにする必要があります(つまり、異なるデータベースの選択がAPIに影響を与えることはありません)。次のタスクは、APIの人間が読める構造とデータベースの間に関係を作成することです(リレーショナルであるか他の何かであるかに関係なく)。そうです、翻訳を行う必要がありますが、クエリ文字列がどのように役立つかわかりません。典型的な構造はapi.my.website/collection/element/collection/element
です。クエリはフィルタリングに使用できます。example.com/resource?since=2012-06-01
たとえば、「リソース」コレクションから要素のサブセットを取得するように記述できます。一意のIDで表現します。
私の理解では、受信リクエストは常にPHPサーバーとHTTPサーバーの動作に基づいて別々のファイルに送られる必要があると思います。これは当てはまりません。すべてのリクエストを単一のPHPファイルにルーティングしてから解析するようにWebサーバーを構成できます$_SERVER['REQUEST_URI']
。選択したHTTPサーバーによって、マイレージは異なる場合がありますが、これは基本的にあなたがやりたいことです。
グーグルでPHPのフレームワークのリストを見つけましたが、どれもわかりません。他にもありますが、最近誰かがApifyについて言及しているのを聞きましたが、それについてもあまりお話しできません。PHPは、おそらくAPIを実装するためのもう1つの一般的な選択肢です。ただし、 cURLは、私が知る限り、他のWebサイトに接続するためだけに設計されたライブラリ/ツールです。確かにコマンドラインバージョンを使用してAPIをデバッグすることはできますが、サーバー側ではあまり使用されないと思います。