🥬
FreshForFresh
  • ✌️Xin chào!
  • Overview
    • 💡Data structures and Algorithms
    • 👀Programming
    • 🧠Database
    • 🦴Back-End
    • ✨Front-End
    • 💐Spring Framework
    • 🛠️Tool
  • Data structures and Algorithms
    • 🎰Data Type
    • 🗑️Garbage collection
    • 🧩Data structures
    • 🎲Algorithms
  • Programming
    • 🧮Compiler
      • 🤖Tại sao phải cần compiler?
      • 📠Java Virtual Machine
  • 📈Thread
  • 🔐Lock & Deadlock
  • 🏇Race condition & Data Race
  • 🧯Synchronized
  • 🗜️Blocking IO và Non Blocking IO Client Server Socket
  • 🌐Languages
    • 🎛️Programming Language
    • 📑Client-Side & Server-Side
    • ⁉️Why java? Why javascript?
  • 🗼Design pattern
    • 🎨Front-End Design Pattern
    • 🏗️Back End Design Pattern
      • 🐴with Java
      • 🦄with Spring Boot
      • 🐖with Modern Backend Development
      • 🐁with Microservice
  • 🍀Clean Code
    • 🌊Chương 1: Code sạch
    • 📐Chương 2: Quy tắc đặt tên rõ nghĩa
    • 🚧Chương 3: Cách viết hàm
    • 👻Chương 4: Comments thế nào cho chuẩn?
    • 🥳Chương 5: Định dạng code.
    • 😈Chương 6: Đối tượng và cấu trúc dữ liệu
    • 🐛Chương 7: Xử lí lỗi
    • ☦️Chương 8: Ranh giới code
    • 🧪Chương 9: Unit test
    • 🥂Chương 10: Lớp đối tượng
    • 🥡Chương 11: Code sạch cấp hệ thống
  • Database
    • 🐔Giới thiệu
    • 📰Các loại cơ sở dữ liệu
    • 🐘Các loại DBMS phổ biến
    • 🕵️‍♀️SQL và cách sử dụng với relational database
      • 👺Lệnh SQL
      • 🛢️JOIN trong SQL
      • 🛕GROUP BY trong SQL
      • 🐼ORDER BY trong SQL
      • 🐣Truy vấn con SUBQUERY trong SQL Server
      • 🏦Transaction Trong SQL
      • 🇲🇰ACID
    • ☢️Thiết kế cơ sở dữ liệu
    • 🕍Consistency and concurrency handling
      • 🔒Database locking
      • 🎮Concurrency Control
      • 🙀Isolation Level
    • 🎨Performance & Scability
      • ☝️Indexing
      • 👯‍♂️Partitioning
      • 💅Các tips tăng hiệu suất SQL
      • 🇲🇬Kiểm tra và Xác thực việc Sao lưu và Phục hồi CSDL
      • 🌠Database sharding
      • 🧘‍♂️REPLICATION
      • 😁Các vấn đề ảnh hưởng đến performance.
  • Back-End
    • 🔫API?
    • 🐕‍🦺Web Services
    • 💾Phân biệt API và web service
    • 🙆‍♂️Tìm hiểu về RestAPI
    • 🧦SOAP
    • ✈️GraphQL API
    • 📊Compared GraphQL & REST
    • 📄Phân biệt HTTP & HTTPS
    • 🚵Client & Server
    • 🇩🇲DOM
  • Front-End
    • 🦑User Interface (UI)
    • 🛰️State Management
  • Spring Framework
    • 🔐Spring Security
      • 🌅Đơn giản hoá Spring Security
      • 🌸Spring Security: Authentication and Authorization In-Depth
      • 🚻OAuth2 Basic
      • 🀄JWT + Spring Security Oauth
      • 📤Logout trong ứng dụng sử dụng bảo mật Oauth
      • 🔂Reset Password
      • 🎗️OAuth2 Remember Me với Refresh Token
      • ⛓️OAuth2 cho một Spring REST API
  • Network
    • 💸Mạng máy tính căn bản
  • Tool
    • 🦏Các câu lệnh Docker cơ bản
    • 🦧Github
      • 🐰Các lệnh Git cơ bản
      • 🐇Một số trường hợp khi sử dụng Git
    • 🏚️WebServer
      • 🪂Tổng quan về kiến trúc hệ thống
      • 🔃Cơ bản về WebServer Nginx
  • Tài nguyên
    • 👨‍🏫Course
    • 📖Docs
Powered by GitBook
On this page
  • Notes
  • Rest là gì?
  • Restful API?
  • RESTful hoạt động như thế nào?
  • Authentication và dữ liệu trả về
  • Ý nghĩa của các Status code
  • Authorization
  • Nguyên tắc ràng buộc của Rest
  • Cấu trúc thông điệp của Rest
  • Khối xây dựng Rest
  • Đặc điểm
  1. Back-End

Tìm hiểu về RestAPI

What is representational state transfer (REST)? What is Restful API)? How does it work?

PreviousPhân biệt API và web serviceNextSOAP

Last updated 1 year ago

Notes

  • HTML (viết tắt của từ HyperText Markup Language, hay là "Ngôn ngữ Đánh dấu Siêu văn bản") là một ngôn ngữ đánh dấu được thiết kế ra để tạo nên các trang web trên World Wide Web. Nó có thể được trợ giúp bởi các công nghệ như CSS và các ngôn ngữ kịch bản giống như JavaScript.

  • API (Application Programming Interface) là một tập các quy tắc và cơ chế mà theo đó, một ứng dụng hay một thành phần sẽ tương tác với một ứng dụng hay thành phần khác. API có thể trả về dữ liệu mà bạn cần cho ứng dụng của mình ở những kiểu dữ liệu phổ biến như JSON hay XML.

  • JSON (JavaScript Object Notation) một định dạng phổ biến để gửi và yêu cầu dữ liệu thông qua API REST.. Một đối tượng JSON trông giống như một Đối tượng JavaScript. Trong JSON, mỗi thuộc tính và giá trị ở dạng “key” and “value” được đặt trong dấu ngoặc kép.

  • XML (Extensible Markup Language): là một ngôn ngữ đánh dấu và định dạng tệp để lưu trữ, truyền và tái tạo lại dữ liệu tùy ý. Nó xác định một tập hợp các quy tắc để mã hóa tài liệu ở định dạng vừa có thể đọc được bởi con người vừa có thể đọc được bằng máy móc.

Rest là gì?

REST (REpresentational State Transfer) là một dạng chuyển đổi cấu trúc dữ liệu, một kiểu kiến trúc để viết API. Nó sử dụng phương thức HTTP đơn giản để tạo cho giao tiếp giữa các máy. Vì vậy, thay vì sử dụng một URL cho việc xử lý một số thông tin người dùng, REST gửi một yêu cầu HTTP như GET, POST, DELETE, vv đến một URL để xử lý dữ liệu. Rest Api thường không được xem là công nghệ, mà nó là giải pháp giúp tạo ra những ứng dụng web services chuyên dụng để thay thế cho nhiều kiểu khác như: SOAP, WSDL,...

Restful API?

RESTful API (còn được gọi là REST API) là một tập hợp các tiêu chuẩn dùng trong việc xây dựng và thiết kế API cho web services để việc quản lý các Resource trở nên dễ dàng hơn. Có thể dễ dàng nhận thấy rằng RESTful API chú trọng vào tài nguyên của hệ thống, những Resource này thường được định dạng sẵn và sử dụng HTTP để truyền tải đi.

RESTful hoạt động như thế nào?

REST hoạt động chủ yếu dựa vào giao thức HTTP. Các hoạt động cơ bản nêu trên sẽ sử dụng những phương thức HTTP riêng.

  • GET (SELECT): Trả về một Resource hoặc một danh sách Resource.

  • POST (CREATE): Tạo mới một Resource.

  • PUT (UPDATE): Cập nhật thông tin cho Resource.

  • DELETE (DELETE): Xoá một Resource. Những phương thức hay hoạt động này thường được gọi là CRUD tương ứng với Create, Read, Update, Delete – Tạo, Đọc, Sửa, Xóa.

Ở thời điểm hiện tại, JSON được rất nhiều lập trình viên sử dụng làm format (định dạng) để viết RESTful API

Authentication và dữ liệu trả về

RESTful API không sử dụng session và cookie, nó sử dụng một access_token với mỗi request. Dữ liệu trả về thường có cấu trúc như sau:

{
    "data":  {
        "id": 1,
         "name" : "Hana"
   }
}

Ý nghĩa của các Status code

200 OK – Trả về thành công cho những phương thức GET, PUT, PATCH hoặc DELETE. 201 Created – Trả về khi một Resouce vừa được tạo thành công. 204 No Content – Trả về khi Resource xoá thành công. 304 Not Modified – Client có thể sử dụng dữ liệu cache. 400 Bad Request – Request không hợp lệ 401 Unauthorized – Request cần có auth. 403 Forbidden – bị từ chối không cho phép. 404 Not Found – Không tìm thấy resource từ URI 405 Method Not Allowed – Phương thức không cho phép với user hiện tại. 410 Gone – Resource không còn tồn tại, Version cũ đã không còn hỗ trợ. 415 Unsupported Media Type – Không hỗ trợ kiểu Resource này. 422 Unprocessable Entity – Dữ liệu không được xác thực 429 Too Many Requests – Request bị từ chối do bị giới hạn

Authorization

Hiện tại có 3 cơ chế Authorize chính:

  • HTTP Basic

  • JSON Web Token (JWT)

  • OAuth2

Nguyên tắc ràng buộc của Rest

6 nguyên tắc ràng buộc của kiến trúc RESTful

  1. Client–server architecture

  2. Cacheability

  3. Statelessness

  4. Layered system

  5. Uniform interface

  6. Code on demand (Optional)

Cấu trúc thông điệp của Rest

Rest Request gồm 4 thành phần chính:

  1. Method - CRUD : POST, PUT, GET, DELETE

  2. Endpoint - Chứa URI ( phổ biến nhất là URL )

  3. Header - Chứa thông tin liên quan đến client và server như tên, trạng thái, authentication, ip, …

  4. Body - Chứa dữ liệu

Rest Response - Server gửi đại diện dữ liệu thường được viết ở dạng XML, JSON, …

Khối xây dựng Rest

Rest Headers: Tiêu đề HTTP là một phần quan trọng của yêu cầu và phản hồi API vì chúng đại diện cho siêu dữ liệu được liên kết với yêu cầu và phản hồi API

  1. Request and Response

  2. Body Request Authorization

  3. Response Caching

  4. Response Cookies Rest Body: Tạo phần thân dữ liệu cho điểm cuối để kiểm tra. Điều này đôi khi được gọi là tải trọng. Xây dựng một phần thân bất có kỳ định dạng mà API mong muốn. Trường hợp của Rubrik, định dạng phải là JSON, nhưng các API khác có thể sử dụng hoàn toàn XML, YAML… Rest Params: Sử dụng các tham số truy vấn để kiểm soát dữ liệu nào được trả về trong các phản hồi của điểm cuối. Rest Authorization : Chứng minh có quyền truy cập, như kiểu có một cái chìa khóa nhưng chỉ được phép mở một vài cửa trong nhà chứ không được phép mở tất cả các cửa.

Đặc điểm

Có tính nhất quán xuyên suốt các API. Tồn tại mà không lưu trạng thái (Stateless existence), Sử dụng HTTP status code khi có thể. Sử dụng URL Endpoint có phân tầng logic. Đánh version trong URL thay vì trong HTTP Headers.

Ưu, nhược điểm

a, Ưu điểm

REST thích ứng tốt với các công nghệ web mới, dễ dàng sử dụng và bảo trì. Tách biệt rõ ràng giữa server và client, chỉ giao tiếp thông qua các phương thức HTTP và URI (đọc lại bài viết REST 101). Các thông tin có thể được lưu lại phía client → tránh phải gọi đến resource nhiều lần. Có thể sử dụng bất kỳ cấu trúc nào (XML, JSON, hoặc cấu trúc do server và client quy ước với nhau).

b, Nhược điểm

Chỉ hoạt động trên các giao thức HTTP. Việc bảo mật và xác thực có thể không đảm bảo bằng SOAP (stateless).

via:

🙆‍♂️
viblo