CRUD là gì? Điểm khác nhau giữa CRUD và REST

1505
30-11-2018
CRUD là gì? Điểm khác nhau giữa CRUD và REST

Thuật ngữ CRUD có lẽ không còn quá xa lạ đối với những người làm lập trình web chuyên nghiệp. Có thể nói, CRUD là lựa chọn tối ưu để lưu trữ các thông tin dữ liệu trên hệ thống. Hãy cùng Bizfly Cloud tìm hiểu về CRUD và các thành phần, chức năng vượt trội trong bài viết hôm nay nhé.

CRUD là gì?

Khi xây dựng các API, các mô hình cung cấp bốn loại chức năng cơ bản. Mô hình phải có khả năng Create, Read, Update, và Delete tài nguyên. Các nhà khoa học máy tính thường gọi tên các các chức năng này bằng từ viết tắt CRUD. Một mô hình cần có khả năng thực hiện tối đa bốn chức năng này. Nếu một action không thể được mô tả bởi một trong bốn thao tác này, thì rất có thể nó một mô hình của riêng chính nó mà thôi.

Các nhà khoa học máy tính thường gọi tên các các chức năng này bằng từ viết tắt CRUD

Các nhà khoa học máy tính thường gọi tên các các chức năng này bằng từ viết tắt CRUD

CRUD paradigm rất phổ biến trong việc xây dựng các ứng dụng web, bởi vì nó cung cấp một framework để nhắc nhở các developer về cách xây dựng các mô hình đầy đủ và hữu ích. 

Ví dụ, hãy hình dung một hệ thống để theo dõi các đầu sách trong thư viện. Trong cơ sở dữ liệu thư viện giả định này, chúng ta có thể tưởng tượng rằng sẽ có một tài nguyên sách (books resource), nơi lưu trữ các đối tượng sách (book object). Giả sử đối tượng sách trông như sau:

"book": { "id": <Integer>, "title": <String>, "author": <String>, "isbn": <Integer> }

Để làm cho hệ thống thư viện này có thể sử dụng được, chúng tôi muốn đảm bảo có các cơ chế rõ ràng để hoàn thành các CRUD operation:

Create - Sử dụng khi một library book mới được được thêm vào danh mục. Chương trình gọi hàm này sẽ cung cấp các giá trị cho "title", "author", và "isbn". Sau khi chức năng này được gọi, sẽ có một entry mới trong books resource tương ứng với cuốn sách mới này. Ngoài ra, mục nhập mới được gán một id duy nhất, có thể được sử dụng để truy cập vào tài nguyên này.

Read - Sử dụng để xem tất cả các sách hiện có trong danh mục. Lệnh gọi hàm này sẽ không thay đổi các sách trong danh mục - nó sẽ đơn giản truy xuất tài nguyên và hiển thị kết quả. Cuốn sách được truy xuất sẽ không được sửa đổi, chỉ lấy ra.

Update - Phải có một chức năng để gọi khi thông tin về một cuốn sách phải được thay đổi. Chương trình gọi hàm sẽ cung cấp các giá trị mới cho "title", "author", và "isbn". Sau khi gọi hàm, mục nhập tương ứng trong tài nguyên sách sẽ chứa các trường mới được cung cấp.

Delete - Nên có một chức năng i để xóa một cuốn sách thư viện khỏi danh mục. Chương trình gọi hàm sẽ cung cấp một hoặc nhiều giá trị ("title", "author", và/hoặc "isbn") để xác định sách, và sau đó cuốn sách này sẽ bị xóa khỏi tài nguyên. Sau khi chức năng này được gọi, tài nguyên sách chứa tất cả các sách trước đây, ngoại trừ sách đã bị xóa.

Điểm khác nhau giữa CRUD và REST

Nguyên tắc hoạt động của CRUD

CRUD gồm có bốn lệnh cơ bản là CREATE, READ, UPDATE và DELETE, hình thành nên một cơ sở dữ liệu. Tuy không phải là phương thức tạo API nhưng trên thực tế, nguồn gốc của CRUD luôn nằm ở trong hồ sơ cơ sở dữ liệu.

CRUD hoạt động như một chu trình và được sử dụng bởi hầu hết các trang web. Ví dụ khi mua hàng trên sàn thương mại điện tử, người mua phải tạo tài khoản (CREATE), cung cấp thông tin tài khoản (UPDATE), xem thông tin (READ) và xóa giỏ hàng (DELETE).

Nguyên tắc hoạt động của REST

Thông thường, mỗi lệnh REST sẽ tập trung xung quanh một tài nguyên. Tài nguyên trong REST có thể là bất kỳ thứ gì dẫn tới thông báo thông qua giao thức HTTP như bức ảnh, file tài liệu,...

REST giúp người dùng nắm được sáu yếu tố cơ bản của tình trạng chuyển đổi trạng thái đại diện bao gồm:

  • Client-server mandata (dữ liệu ủy nhiệm máy khách): Tiếp cận phân tán, tận dụng bản chất tách biệt giữa client và server. Mỗi dịch vụ sẽ cần phản hồi yêu cầu của người dùng. Khi đó, server có thể lựa chọn chấp nhận hoặc từ chối yêu cầu.
  • Cache (bộ nhớ đệm): Lưu trữ thông tin yêu cầu phản hồi máy chủ được gắn nhãn. Không chỉ thế, bộ nhớ đệm còn giúp cải thiện một vài nhược điểm của tình trạng không trạng thái. Chẳng như đối với người từng gửi yêu cầu, bộ nhớ đệm sẽ lưu lại ngay lập tức để tránh tình trạng lưu thêm lần nữa.
  • Statelessness (vô quốc tịch): Điều khiển cấu trúc RESTful, có khả năng quyết định lệnh cho phép để cung cấp cho client và server. Tiếp đó, thực hiện yêu cầu không trạng thái giao tiếp giữa người dùng và bên cung cấp dịch vụ, yêu cầu thông tin để server phản hồi.
  • Layered system (phân lớp hệ thống): Có khả năng mở rộng cấu trúc RESTful. Cụ thể, bên trong Layered system sẽ có các lớp nhằm phục vụ việc mở rộng giao diện. Nhờ đó, người dùng có thể dễ dàng thêm lệnh mới và phần mềm trung gian, mà làm không ảnh hưởng đến hoạt động của client và server.
  • Code-on-demand (mã yêu cầu tùy chọn): Các ứng dụng RESTful tuy không nhất thiết phải có Code-On-Demand nhưng sẽ cần có Client-Server, Statelessness và Layered Systems. Mã yêu cầu cho phép logic của máy khách và máy chủ tách biệt để có thể dễ dàng thực hiện hoạt động logic.
  • Interface/uniform contract (giao diện/hợp đồng đồng nhất): Cấu trúc RESTful áp dụng nguyên tắc xác định hợp đồng thống nhất, giúp hạn chế việc sử dụng quá nhiều giao thức độc lập trong một API. Cách này giúp đảm bảo chỉ có một giao thức được phân phối đến hệ thống siêu kết nối.

Thực hành CRUD

Các hàm để Create, Read, Update, và Delete là các thành phần cơ bản của một storage model. Hãy tưởng tượng bạn đang cố gắng thiết kế một hệ thống theo dõi các lớp tập luyện, bao gồm tên của mỗi lớp, người dạy nó, và thời gian của lớp. Một đối tượng lớp mẫu sẽ trông giống như sau:

{ "class": { "id": 1 "name": "Pure Strength", "trainer": "Bicep Bob", "duration": 1.5 } }

Tất cả các lớp được lưu trữ trong một tài nguyên lớp học tại www.musclecademy.com/classes.

Đối với mỗi hoạt động CRUD, hãy viết câu trả lời cho các câu hỏi sau:

Bạn cần triển khai những lộ trình nào để cung cấp mô hình lớp tập luyện với chức năng CRUD này và các HTTP verb tương ứng của chúng là gì?

Mỗi route  có hiệu lực gì trên cơ sở dữ liệu?

Response body cho mỗi route return là gì?

Response code cho mỗi route return là gì?

CRUD practice answer

1. Create

Route: POST /classes

Ảnh hưởng đến Database: Thêm lớp được cung cấp trong request body vào cơ sở dữ liệu

Response Body: { "class": The Newly-Created Class } Success Response Code: 201

2. Read (All Classes)

Route: GET /classes

Ảnh hưởng đến  Database: None

Response Body: { "classes": [ Array of All Saved Classes ] } Success Response Code: 200

3. Read (One Class)

Route: GET /classes/:id

Ảnh hưởng đến Database: None

Response Body: { "class": The class with the specified ID } Success Response Code: 200

4. Update

Route: PUT /classes/:id

Ảnh hưởng đến Database: Cập nhật lớp với ID được chỉ định để có thông tin lớp được cung cấp trong request body.

Response Body: { "class": The updated class now saved in the database } Success Response Code: 200

5) Delete

Route: DELETE /classes/:id

Ảnh hưởng đến  Database: Loại bỏ lớp với ID được chỉ định từ cơ sở dữ liệu.

Response Body: None Success Response Code: 204

Theo Bizfly Cloud chia sẻ

>> Có thể bạn quan tâm: SDK là gì? Sự khác nhau giữa API và SDK

Bizfly Cloud là nhà cung cấp dịch vụ điện toán đám mây với chi phí thấp, được vận hành bởi VCCorp.

Bizfly Cloud là một trong 4 doanh nghiệp nòng cốt trong "Chiến dịch thúc đẩy chuyển đổi số bằng công nghệ điện toán đám mây Việt Nam" của Bộ TT&TT; đáp ứng đầy đủ toàn bộ tiêu chí, chỉ tiêu kỹ thuật của nền tảng điện toán đám mây phục vụ Chính phủ điện tử/chính quyền điện tử.

Độc giả quan tâm đến các giải pháp của Bizfly Cloud có thể truy cập tại đây.

DÙNG THỬ MIỄN PHÍ và NHẬN ƯU ĐÃI 3 THÁNG tại: Manage.bizflycloud

TAGS: CRUD
SHARE