クイックダウンロード
CRUDとは、データに対して行う4つの基本的な操作(作成、読み取り、更新、削除)を指し、通常はデータベースまたはアプリケーションロジックレベルで行われます。一方、RESTはAPI設計スタイルであり、POST(作成)、GET(読み取り)、PUT/PATCH(更新)、DELETE(削除)などのHTTPメソッドを使用して、これらの操作をWeb上で公開します。
-
CRUD操作とは、データの永続性(作成、読み取り、更新、削除)に焦点を当てたものであり、通常はデータベースまたはバックエンドのロジック層で処理されます。
-
RESTは、一貫性のあるエンドポイントとステートレスなリクエストを使用して、APIがHTTP経由でリソースを公開する方法を定義します。
-
CRUDとRESTの主な違いはスコープです。CRUDはデータ操作を処理するのに対し、RESTはAPIを通じてそれらの操作にアクセスし、実行する方法を定義します。
-
LogicMonitorを使用すると、REST APIの動作とCRUDデータ操作の両方を監視して、問題をより迅速にトラブルシューティングできます。
CRUD と REST は、アプリケーション プログラム インターフェイス (API) 業界で最も人気のある 2 つの概念です。
CRUDとは、Create(作成)、Read(読み取り)、Update(更新)、Delete(削除)の略で、データの管理に焦点を当てた用語です。
REST(Representational State Transfer)とは、クライアントとサーバーがどのように相互作用し、通信するかに焦点を当てたWebサービスの設計手法です。
どちらもデータの取り扱いに関わるが、RESTはシステムがどのようにリソースを公開し、アクセスするかを定義するのに対し、CRUDはデータが実際にどのように作成され、管理されるかに焦点を当てている。
このブログでは、RESTとCRUDとは何か、それらを支配する基本原則、そしてRESTとCRUDの類似点と相違点について解説します。
RESTとは何ですか?
RESTはRepresentational State Transferの略で、システム間のWeb上での通信方法を定義するアーキテクチャスタイルです。
RESTプロトコルの創始者であるロイ・フィールディングは、RESTを「分散ハイパーメディアシステム内のアーキテクチャ要素の抽象化」と定義している。
RESTはどのようにして生まれたのか?
2000年にRESTが登場する以前は、Web APIを構築したり利用したりするための標準的な方法は存在しなかった。既存のプロトコルは複雑で一貫性に欠けていた。
ロイ・フィールディングとその同僚たちはこの問題を解決するためにRESTを開発し、サーバーがウェブ上のどこでもデータを交換できる標準規格を作成した。
REST準拠のシステムは RESTful RESTベースのAPIは、ステートレス性とクライアントとサーバーの関心が分離されているという特徴を持つシステムです。2000年の登場以来、eBayやAmazonなど多くの企業がRESTベースのAPIを利用してきました。
RESTful APIとは?(RESTful APIの意味解説)
REST API(またはRESTful API)とは、RESTの原則に準拠したAPIのことです。アプリケーションがGET、POST、PUT、DELETEといった標準的なHTTPメソッドを使用して、Web上で通信することを可能にします。
REST APIの正式名称は、Representational State Transfer Application Programming Interface(表現状態転送アプリケーションプログラミングインターフェース)です。
具体的な例を挙げますと、以下の通りです。
GET /users/123
POST /users
PUT /users/123
/users/123 を削除
各エンドポイントはリソース(ユーザーなど)を表し、HTTPメソッドは実行するアクションを定義します。REST APIの各URLはRESTエンドポイントと呼ばれ、特定のリソースを表し、クライアントがそのリソースとどのようにやり取りするかを定義します。
REST APIはCRUD操作に対応することが多いが、両者は同じものではない。CRUDはデータを管理するものであり、RESTはデータを公開するものである。
RESTリソースはデータベースレコードとは異なります。単一のリソースは、複数のデータソースを組み合わせたり、保存されたデータだけでなくアクションを表したりすることができます。
すべてのRESTエンドポイントがCRUD操作に直接対応するわけではありません。たとえば、/servers/123/restartのようなエンドポイントは、作成、読み取り、更新、削除のいずれにもきれいに分類できないアクションを実行します。
| CRUD操作 | 典型的なRESTメソッド | 例: |
|---|---|---|
| 創造する | POST | POST /users |
| タリアセン・ウェストにおける修復作業について | GET | GET /users/123 |
| 更新 | PUT / パッチ | PUT /users/123 |
| 削除 | DELETE | /users/123 を削除 |
RESTの6つの基本原則(6つのREST制約)とは?
それでは、それらを詳しく見ていきましょう。
1. 独立したクライアント・サーバー間の相互作用
RESTでは、クライアントとサーバーを独立して構築および更新できます。どちらも、相手の内部動作を知る必要はありません。
サーバーはサービス(データ、ファイル、処理など)を提供し、クライアントはそれらを利用する。RESTは両者を疎結合に保つため、どちらの側も結果に影響を与えることなく独立して動作できる。クライアントとサーバーがメッセージ送信時に使用するフォーマットを認識していれば、異なるクライアントでも最終的には同じRESTエンドポイントに到達できる。クライアントとサーバーのインターフェースが分離されているため、両システムとも独立して進化できる。
2. REST APIにおけるステートレス通信
RESTサーバーはクライアントのセッション状態を保存しません。各リクエストは新規リクエストとして扱われます。クライアントは、認証情報を含め、サーバーが必要とするすべての情報をリクエストごとに送信する必要があります。
3. キャッシングによる効率向上
サーバー上のリクエストは、さまざまな経路またはキャッシュを通過します。これらのキャッシュは、ローカル キャッシュ、プロキシ キャッシュ、またはリバース プロキシのいずれかであり、RESTful API サーバーは情報をキャッシュ可能またはキャッシュ不可能としてマークできます。クライアントがエンド リクエストを送信すると、このリクエストは一連のキャッシュを通過します。そのパス上のいずれかのキャッシュに表現の最新のコピーがある場合は、そのキャッシュを使用して結果が生成されます。どのキャッシュもリクエストに対応できない場合は、元のサーバーに戻ります。RESTful API サーバーは、情報がキャッシュ可能かキャッシュ不可能かを判断します。
キャッシングにはいくつかの利点があり、そのうちのいくつかは次のとおりです。
- 帯域幅を削減
- メモリからデータを取得するためにサーバーとやりとりする回数を減らすことで、レイテンシを短縮します。
- サーバー負荷を軽減
- ネットワーク障害の減少
4. 均一なインターフェースを介した予測可能な相互作用
RESTシステムでは、クライアントとサーバーは予測可能な方法でやり取りします。システム内のリソースは、論理的なUniform Resource Identifier(URI)のみに従います。この統一性こそが、RESTを他のAPIスタイルと区別するものです。REST APIのリソースは、必要に応じてHypermedia as the Engine of Application State(HATEOAS)を使用して関連情報を取得します。RESTful API上のすべてのリソースは、命名規則とリンク形式に関する特定のガイドラインに従います。統一されたインターフェースは、次の4つの基本原則に従います。
- リソースベース: 各リソースは、リソース識別子として URI を使用します。
- 表現によるリソースに対するアクション: メタデータに関連付けられたリソースには、変更または削除できるサーバー上の情報が含まれています。
- 自己記述型メッセージ: 各メッセージには、その処理方法を説明するすべての情報が含まれています。
- アプリケーション状態のエンジンとしてのハイパーメディア (HATEOAS): クライアントは、本文コンテンツ、要求ヘッダー、および URI によって状態を提供し、サービスは、応答コード、応答ヘッダー、および本文コンテンツによって顧客に状態を提供します。これをハイパーメディアと呼びます。
5. スケーラビリティのための階層型アーキテクチャ
RESTful API は、結果を提供するために階層化されたシステムに依存しています。このアプローチにより、開発者はシステムをモジュール化できます。たとえば、OpenAPI を使用してカスタム Terraform プロバイダーを作成して API 管理を簡素化する方法を参照してください。この階層化されたシステムは、レイヤーが割り当てられたレイヤーを超えて参照できないように制限する階層を提供し、開発者が さまざまな機能を異なるサーバーにデプロイする各レイヤーは独立して動作し、各レイヤーは自身のレイヤー以外の機能については認識しません。ユーザー側では、レイヤードシステムでは、ユーザーがプライマリサーバーと中間サーバーのどちらに接続しているかを区別することは通常できません。中間サーバーの重要性は、負荷分散とキャッシュ共有を提供できる点にあります。
「スケーラブルで効率的な Web サービスを構築するには、CRUD と REST の両方を習得することが不可欠です。」
6. オンデマンドコーディング(オプション)
一部のRESTシステムでは、サーバーがクライアントに実行可能なコードを送信できます。これはオプションであり、あまり一般的ではないため、一部のREST解説書では省略されていますが、標準的な6つの制約モデルの一部です。
CRUDとは何ですか?
CRUDとは、CREATE(作成)、READ(読み取り)、UPDATE(更新)、DELETE(削除)の頭文字をとった略語です。
CRUDはデータベースの概念として始まりました。これはデータ操作のサイクルを説明するものであり、アーキテクチャを説明するものではありません。
異なるプログラミング言語やフレームワークは、それぞれ独自の命名規則を用いてCRUDを実装している。
良い例としては、挿入、選択、更新、削除を使用するSQL(構造化クエリ言語)が挙げられます。また、動的なWebサイト、例えばあらゆるeコマースサイト(Amazon、Mangoなど)の購入者にもCRUDサイクルが存在します。ユーザーはアカウントを作成したり、情報を更新したり、ショッピングカートから商品を削除したりできます。CRUDフレームワークを使用するその他のプログラミング言語としては、Java(JOOQ、iBAtis)、Python(Django)、PHP(Propel、Doctrine)、.NET(NHibernate、LLBLGEN Pro)などがあります。
CRUDの短い歴史
CRUDという略語は1980年代に遡り、元々はSQLデータベースの機能を表す言葉だった。この用語が初めて知られるようになったのは1983年の書籍である。 データベース環境の管理 CRUD操作についての最初の言及は、1990年の記事「セマンティックからオブジェクト指向データモデリングへ” (ハイム・キロフ著)
CRUDは、永続ストレージ、つまりデータを作成したプロセスよりも長く存続するデータのために設計されました。今日では、CRUDの原則はSQL、REST API、その他のシステム全体で用いられています。
CRUDの4つの基本操作
前述のとおり、CRUDサイクルの4つの基本的な操作は、作成、読み取り、更新、削除です。API設計では、これらの操作はエンドポイントを通じて公開されることが多く、非公式には「CRUDエンドポイント」または「CRUD API」と呼ばれることもあります。
- CREATE: 1つ以上のエントリを追加します。SQLのINSERT関数に相当します。
- READ: さまざまな条件に基づいてデータを取得し、SQL の Select 関数に相当します。
- 更新:手順を変更し、上書きせずにレコードを修正します。
- DELETE: 指定したエントリを1つ以上削除します。
LとS:CRUDへの追加
CRUDは、ページ分割された結果を処理するためにCRUDL(リスト機能を追加)に拡張される場合や、クエリを処理するためにSCRUD(検索機能を追加)に拡張される場合があります。
RESTとCRUDに関するセキュリティ上の考慮事項
APIは、アプリケーションがネットワークやインターネットを介して接続し、通信することを可能にします。RESTシステムとCRUDシステムの両方にセキュリティ制御が必要です。どちらのアプローチを採用する場合でも、基本原則は変わりません。
- 認証と認可: 認証を必須とし、承認されたユーザーのみがデータにアクセスできるようにします。OAuth 2.0フレームワークはREST原則を利用するアプリケーションやサービスに適していますが、CRUD操作にはロールベースのアクセス制御が最適です。
- データ検証: 処理前に、入力データ(ファイルの種類、形式、サイズ)を検証し、悪意のある要素をすべて削除します。
- 暗号化機能: 転送中のデータにはHTTPSを使用し、保存中のデータは暗号化してください。
- レート制限: クライアントごとのリクエスト数を制限してください。これにより、過負荷を防ぎ、DoS攻撃の阻止に役立ちます。
RESTおよびCRUDの実装例
コード上ではそれぞれどのように表現されるかを以下に示します。
SQLを使用したCRUDの例
-- Insert a new user into the 'users' table
INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');
-- Select a user from the 'users' table where the ID is 1
SELECT * FROM users WHERE id = 1;
-- Update the email of the user where the ID is 1
UPDATE users SET email = '[email protected]' WHERE id = 1;
-- Delete a user from the 'users' table where the name is 'John Doe' and the email is '[email protected]'
DELETE FROM users WHERE name = 'John Doe' AND email = '[email protected]';上記の例のグラフィックを使用すると、グラフィックで概説されている CRUD 手順は、SQL を使用して次の機能を実行します。
- 作成: このステップでは、コマンドはデータベースのユーザー テーブルに、John Doe という名前の新しいレコードを挿入し、メールアドレスは [メール保護].
- 読み方:このコマンドは、SQLテーブルのid列の値が1であるレコードをusersテーブルから取得して表示します。
- 更新: この行は、レコードの「id」値が1の「email」列の情報をメールアドレスで上書きします。 [メール保護].
- 削除: このコマンドは、同じメールアドレスで「John Doo」という名前が入力されているデータベース内の誤ったレコードを削除します。
HTTPメソッドを使用したRESTの例
# Create a new user (POST request)
POST /users
{
"name": "John Doe",
"email": "[email protected]"
}
# Retrieve user information by ID (GET request)
GET /users/1
# Update user information (PUT request)
PUT /users/1
{
"email": "[email protected]"
}
# Delete a user by ID (DELETE request)
DELETE /users/1上記の例の図では、これらの REST コマンドは次のタスクを実行します。
- POST: 名前「John Doe」とメールアドレス「[メール保護]
- PUT: ID 1 のユーザーのメールを「[メール保護]この例では、John Doe レコードの ID が 1 であると想定しています。
実践的なREST APIの使用例とCRUDの使用例
RESTとCRUDはしばしば連携して使用されますが、それぞれに独自の強みがあります。
RESTは、ソーシャルプラットフォーム、ストリーミングサービス、銀行アプリなど、一般公開されるAPIに適しています。また、多くのコンポーネントが相互に通信する必要があるマイクロサービスやIoTシステムにも適しています。
それどころか、CRUDはCMSエディタ、カレンダー、管理ダッシュボード、在庫管理システムなど、ユーザーがレコードを直接操作するあらゆるデータ管理ツールに最適です。
シンプルな管理ダッシュボードはCRUD操作を多用した設計の良い例ですが、公開SaaS APIや内部サービスアクションエンドポイントは、RESTが基本的なデータ操作を超えて付加価値を提供するより良い例です。
「CRUD はデータ操作に重点を置いていますが、REST は Web サービスの通信方法を定義します。」
CRUDとRESTの類似点は何ですか?
RESTとCRUDは、重複するコマンドを共有している。
RESTコマンド
- POST: データベースに新しいレコードを作成します。
- GET: このリクエストは、データベースから取得した情報を読み取ります。
- PUT/PATCH: オブジェクトを更新します。
- DELETE: データベースからレコードを削除します。
CRUDコマンド
- CREATE: INSERT ステートメントを通じて新しいレコードを作成します。REST では、これは POST コマンドです。
- READ/RETRIEVE: これらの手順は、入力パラメータに基づいてデータを取得します。REST では、これは GET コマンドに相当します。
- UPDATE: データを上書きせずに更新します。REST では、これは PUT リクエストです。
- DELETE: データベースからデータを削除します。REST は同じリクエストを使用してデータを削除します。

CRUDとRESTの違いは何ですか?
両者の類似点から混同しやすいが、違いは以下のとおりである。
| 側面 | REST | 残酷 |
|---|---|---|
| それは何ですか | APIのためのアーキテクチャスタイル | 一連のデータ操作 |
| 層 | APIと通信レイヤー | データ層(データベース/バックエンドロジック) |
| 目的 | システムがリソースを公開および交換する方法を定義します | レコードの作成方法と管理方法を定義します。 |
| プロトコル | HTTP(GET、POST、PUT、PATCH、DELETE)を使用します。 | データベースコマンド(SQLのINSERT、SELECT、UPDATE、DELETE)を使用します。 |
| 対象領域 | データ以外の操作も含まれる(例:/servers/123/restart) | データ操作は4つに制限されています |
| 州/地域 | ステートレス — 各リクエストは独立しています | ステートフル — 永続的なレコードに基づいて動作する |
| リソースモデル | リソースは複数のデータソースを組み合わせたり、アクションを表したりすることができる。 | レコードはストレージ内の行またはドキュメントに直接対応します |
| 更新動作 | PUTはリソース全体を置き換え、PATCHはリソースの一部を更新します。 | UPDATEはレコード内のフィールドを変更します |
| 独立性 | CRUD操作なしでも存在可能 | RESTなしでも存在可能(API以外の多くの場面で使用される) |
| ベスト | パブリックAPI、マイクロサービス、IoT、分散システム | 管理パネル、CMSエディター、内部ツール、直接データ管理 |
| 例: | GET /users/123 | SELECT * FROM users WHERE id = 123 |
それを覚える一番簡単な方法は次のとおりです。 RESTはアーキテクチャであり、CRUDは機能です。REST APIは内部的にCRUD操作を使用できますが、アクションのトリガー、計算済みリソースの返送、ハイパーメディアリンクの公開など、CRUDではできないこともRESTで実現できます。CRUD単独ではREST APIを置き換えることはできません。
注意: CRUDはデータ操作に焦点を当てているのに対し、RESTはWebサービスのアーキテクチャを定義し、クライアントとサーバーがどのように相互作用するかを規定する。
RESTとCRUDは連携して動作するが、同じものではない。
RESTとCRUDは連携して機能しますが、同じものではありません。RESTはアーキテクチャであり、CRUDは一連の操作です。一方はシステム間の通信方法を定義し、もう一方はデータに対して何が起こるかを定義します。
方法を参照してください LogicMonitorのAPMプラットフォーム 本番環境におけるRESTおよびCRUD APIの監視を支援します。
フルスタックの可視性でREST APIとCRUDワークフローを監視する
LogicMonitorでAPIリクエスト、バックエンドのパフォーマンス、および関連ログを追跡することで、問題をより迅速に特定し、サービス全体にわたる障害を追跡し、RESTおよびCRUD駆動型アプリケーションの信頼性を向上させることができます。
よくあるご質問
1. プログラミングにおけるCRUDとはどういう意味ですか?
プログラミングにおいて、CRUDとは、保存されたデータとやり取りするために使用される一連の基本的な操作を指します。これは通常、API設計レベルではなく、バックエンドのロジックやデータベースクエリで実装されます。
2. CRUDとは何ですか?また、CRUD操作とは何ですか?
CRUD操作とは、システムが新しいデータを作成したり、既存のデータを取得したり、レコードを更新したり、削除したりすることを可能にする操作であり、ほとんどのデータ駆動型アプリケーションの基盤を形成します。
3. REST APIとは何ですか?
REST APIとは、Representational State Transfer Application Programming Interfaceの略です。RESTの原則に基づいて設計されたAPIであり、HTTP経由でリソースを公開し、リクエストを処理します。実際には、REST APIの意味は、システムが標準的な方法と予測可能なエンドポイントを使用してデータを要求および交換するための、一貫性のある方法であると言えます。
4. RESTエンドポイントとは何ですか?
RESTエンドポイントとは、REST APIにおける特定のURLであり、リソースを表し、クライアントがリソースとどのようにやり取りできるかを定義します。例えば、 /users/123 これは、特定のユーザーの情報を取得または更新できるエンドポイントです。各エンドポイントは、アクションを実行するためのHTTPメソッド(GETやPOSTなど)とペアになっています。
5. APIとREST APIの違いは何ですか?
APIとは、システム間の通信を可能にする一般的なインターフェースであり、REST APIとは、ステートレス性、リソースベースのエンドポイント、標準的なHTTPメソッドといったRESTの原則に従う特定の種類のAPIである。
6. REST APIとRESTful API:違いはあるのか?
7. REST APIの一般的な使用例は何ですか?
REST APIのユースケースには、Webアプリやモバイルアプリ、マイクロサービス間の通信、公開API(決済サービスや地図サービスなど)、そして信頼性の高いデータ交換が必要な社内ツールなどが含まれます。
8. RESTとHTTP:両者の違いとは?
RESTとHTTPの違いは、役割の違いに尽きます。HTTPはデータ送信に使用されるプロトコルであり、RESTはHTTPを使用してAPIのやり取りを構造化する設計スタイルです。



