はじめに
APIモデルの構築には戦略的なアプローチが必要で、その基本となるのがCRUDです。開発者に道を示し、高品質なAPI開発の指針となります。
CRUD(作成、参照、更新、削除)は、堅牢なAPIを構築する際にAPI開発者やプログラマーが従う基本原則です。業界標準に従い、各APIモデルはこの4原則、または最低でも3原則に沿って動作する必要があります。
一部のプログラミング言語はそのままのCRUDを採用し、また一部はカスタマイズ版を用います。Python、PHP、Java、.NetなどはCRUDフレームワークを利用しており、CRUDの主要な機能のひとつは、
必要な要素を開発者に示し、アプリが一体となるための指標となることです。80年代初頭に誕生し、当時はSQLデータベースの有効性を説明するために使われました。時とともに範囲を拡大し、DDSやHTTPの設計原則としても重要視されるようになりました。
CRUD操作の基本を理解すれば、活用の幅が広がります。各操作とその例を確認して、概念をより深く理解してください。
これは、データベースに新しい変更を追加する機能を指します。SQLリレーショナルデータベースでは、作成はINSERTとして扱われます。利用者が新たなデータ行を生成し、既存データと容易に連携できるようにします。
例:
例えば、Fruitsのリスト(http://www.example.com/fruits/)に追加する場合を考えます。
オブジェクト「Mango」を作成するには、このURLにPOSTリクエストを送ります:
{
“fruit”: {
"name": “Mango”,
"color": “Yellow”
}
}
このコードで、fruitsに「Mango」というオブジェクトが追加され、colorプロパティに「Yellow」が設定されます。作成が成功すると、HTTPレスポンス201が返ります。
一般的な検索機能のように、参照はリレーショナルデータベース内の特定の値やデータを探すために用いられます。利用者はキーワードやフィルターを使用し、目的の情報を得ることができます。
例:
先の例で追加したオブジェクトが含まれるリストを参照するため、GETリクエストを発行します。
次のコードを実行してください:
GET http://www.example.com/fruits/
レコードが存在すれば、HTTPレスポンス200が返り、fruitsのリストが表示されます。
{
"fruits": [
{
"id": 1,
"name": “Apple”,
"color": “Red”
},
{
"id": 2,
"name": “Grapes”,
"color": “Green”
},
...
{
"id": 3,
"name": “Mango”,
"color": “Yellow”
}
]
}
Mangoで作成したオブジェクトの詳細を確認するには、次のコードを使用します:
GET http://www.example.com/fruits/3/
更新機能は、既存のデータを変更する際に、データベース全体に影響を与えずに修正が可能です。
全体修正の場合、複数のフィールドの変更が必要となります。SQLやOracle HCM Cloudでは、この機能はUpdateと呼ばれます。
例:
オブジェクトの値を変更するには、そのオブジェクトのURLにPUTリクエストを実行します。以下のようになります:
PUT http://www.example.com/fruits/3/
{
"fruits": {
"name": “Ripe Watermelon”,
"color": “Blood Red”
}
}
操作がHTTPコード200を返せば更新成功です。確認のため、再度参照操作で値をご確認ください。
削除機能により、不要または古くなったデータをデータベースから取り除くことができます。
1つまたは複数のデータを同時に削除することも可能です。
削除にはハードデリートとソフトデリートの2種類があり、ハードデリートはデータを完全に消去し、ソフトデリートはデータ状態を更新するのみで、永久に削除はしません。
例:
簡単です。作成したオブジェクトを削除してみましょう。
GET http://www.example.com/fruits/3/
その後、GETリクエストでHTTPコード204が返れば、内容が存在しないことを意味します。
CRUDの各要素は、機能的なストレージモデルの構築に不可欠で、システムやアプリの設計において重要な役割を果たします。しかし、CRUDモデルをしっかり理解することで、より多くの利点が得られます。以下に簡単な実践例を示します。
ペインティングのトレーニングセッションを管理するシステムの新モデルを開発してみましょう。
このシステムは、クラス一覧、継続時間、講師、参加者などの詳細情報を備える必要があります。
例として、以下のようなモデルになります。
{
"fruits": {
"id": 1
"name": “Mango”,
“color”: “Yellow”,
"weather": “summer”
}
}
次に、各CRUD操作について、以下の質問の答えを考えてみてください。
これらの質問に答えられるようになれば、試作プロジェクトで作成、更新、参照、削除の練習を重ね、概念理解を深めてください。
一部の開発者やアプリ設計者が他の方法ではなくCRUDを選ぶ理由は、優れたパフォーマンスと独自機能によるものです。CRUD採用の主なメリットは以下の通りです。
SQLステートメントがSQLサーバ上で実行されるため、SQL攻撃のリスクが伴います。サーバにはSQL情報や手順が保存され、不正アクセスが致命的な結果を招く可能性があります。
CRUDでは既存のアクションを利用し、利用者データで動的クエリを生成する必要がないため、SQLインジェクション攻撃の可能性を抑制でき、SQLステートメントのパラメータも正確に引用されます。
アドホックなSQL文の利用者は、データベーステーブルへのアクセス権を取得する必要があります。権限が付与されると、ExcelやWordなどのデータ操作やアプリの業務ルールを迂回することも可能になります。
しかし、これにはデータ流出のリスクも伴います。CRUDはアプリのロール管理を可能にし、高いセキュリティとアクセス制御を実現します。
権限はパスワードで保護され、パスワードがアプリに統合されるため、情報変更は難しく、不用意な閲覧を防止します。
CRUDとRESTは、同一の手法とみなされることがあります。この混同は、RESTアプリがCRUDに似た方法で他アプリやコンポーネントと連携するためです。しかし、両者は同一ではなく、明確な類似点と相違点があります。
以下に、両者のポイントを説明します。
RESTアプリは特定のリソースを中心に構築され、これらのリソースはCRUDと同様に容易に作成、参照、更新、削除が可能です。ただし、CRUDでは作成、参照、更新、削除と呼ばれる操作が、RESTではPUT/POST、GET、PATCH/POST、DELETEとなります。
両者は類似点よりも相違点が多いです。主な相違点は以下の通りです。
CRUDはその即時性から、多くの分野で利用されています。リレーショナルデータベースを用いるアプリケーションでは、特にCRUDが頻繁に使われています。ソフトウェア開発以外の主要なCRUDの実装例を見てみましょう。
HR(人事部)は、各組織にとって重要な部門で、スタッフの記録管理や業績の即時確認を担当します。この目的のため、適切なデータベースアプリが利用されることが多いです。
従業員情報を保存するために、Employee Table、HR Data Table、Locations Tableなどが使われます。新たな採用や変更時には、作成操作が必要となります。
メールアドレスや採用情報などの取得には参照操作が用いられ、給与や個人情報、スキルの変更時は更新操作で記録を修正します。
従業員が退職する際は、削除操作でその情報をシステム/データベースから除去します。
eCommerce、オンラインフォーラム、ソーシャルメディアなどの運用分野では、適切なデータベースが維持され、情報の更新や削除にCRUDが広く利用されています。
CRUDテストは、ソフトの即時性を検証するために広く用いられるブラックボックステストの手法です。この手法は、SQLやその他のDBMSにおいて、正確なデータマッピング、ACID特性の維持、そして確実なデータ整合性を保証するために使用されます。
認証、認可、会計、すなわちAAAは、RESTとCRUDの両方に有効なセキュリティ対策です。利用者の認証、各アクセス前の認可、操作およびデータ使用の監査を行い、WallarmのAPI Security platformなどのリソースを活用して、初めから終わりまでセキュリティを守ります。
最新情報を購読