やりたい事
フロント(js)とバックエンド(php)のデータのやり取りを扱うAPIに関しての質問です。
良くあるもっと見るボタンを作っています。表示するものは以下のコンテナと言う順序をもつデータです。
もっと見るボタンを押す度にphpにデータを問い合わせて表示します。
MYSQL
1CREATE TABLE container ( 2 `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 `type` int(10) UNSIGNED NOT NULL, 4 `order_index` int(10) UNSIGNED NOT NULL, 5 `content` text NOT NULL 6) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4
質問
処理の流れとしては
0. ボタンを押すとAPIでサーバーにデータを問い合わせる
0. レスポンスで上記デーブルのコンテナともっとデータがあるかを判断する為のboolean next を返す
0. フロントでレスポンスを受けてデータを表示してnext がfalse ならもっと見るボタンを非表示にする。
この場合APIのリクエストパラメータを以下の様IDのリストにするのはDBを覗かれている様で嫌なのですがなぜダメなのか上手く言語化できません。バックエンドの処理としてはテーブルのプライマリキーであるIDを渡されるとDBのレコードを取ってくる処理がとても書きやすいのですがこれはありですか?
json
1{ 2 "id":[ 3 1, 4 2, 5 3, 6 4, 7 5 8 ] 9}
試した事
プライマリキー以外だと type と order_index で実質データを絞り込めるので以下の様な
startのorder_indexの値からsize分のレコードを取得すると言うリクエストパラメータで処理を書いてみました。php のコードは今回重点ではないので省きます。
json
1{ 2 "type":1, 3 "start":5, 4 "size":5 5}
クエリが以下の形ですね。
MYSQL
1SELECT `content`, `order_index` 2FROM `container` 3WHERE `type` = :type AND `order_index >= :start AND `order_index` <= :start+size;
質問2
フロント側のHTML, JSにデータを持たせてコンテナの追加、削除、更新、順序交換などの処理を追加で実装するとした場合
結局、全てのコンテナにtype, order_index の情報を持たせる必要があるならばID1つで済むならその方が楽ではないでしょうか?
API設計に悩む時間が多く作り直しを何度かしているのでご教示いただけたら幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/29 08:51