RESTFUL API LÀ GÌ? CÁCH THIẾT KẾ RESTFUL API

cũng có thể nói nguyên ổn lí REST và kết cấu tài liệu RESTful được nghe biết thoáng rộng vào giới lập trình web nói tầm thường và xây dựng ứng dụng nói riêng.

Bạn đang xem: Restful api là gì? cách thiết kế restful api

cũng có thể nói bản thân REST không phải là một trong các loại technology. Nó là thủ tục tạo API với nguyên lý tổ chức triển khai cố định. Những nguyên tắc này nhằm gợi ý xây dựng viên sản xuất môi trường cách xử lý API request được trọn vẹn.

Để hiểu rõ hơn về RESTful API ta sẽ đi lần lượt giải thích các khái niệm API, REST giỏi RESTful.


*
*
*
*

REST chuyển động đa phần phụ thuộc giao thức HTTPhường. Các vận động cơ phiên bản nêu trên sẽ áp dụng gần như cách tiến hành HTTP. riêng rẽ.

GET (SELECT): Trả về một Resource hoặc một list Resource.POST (CREATE): Tạo bắt đầu một Resource.PUT (UPDATE): Cập nhật thông tin mang lại Resource.DELETE (DELETE): Xoá một Resource.

Những cách tiến hành giỏi chuyển động này hay được hotline là CRUD tương xứng cùng với Create, Read, Update, Delete – Tạo, Đọc, Sửa, Xóa.

Lúc Này phần nhiều xây dựng viên viết RESTful API giờ đây gần như chọn JSON là format thỏa thuận mà lại cũng có tương đối nhiều tín đồ lựa chọn XML làm cho format, nói thông thường cần sử dụng ráng nào cũng được miễn nhân thể cùng nkhô hanh.

Authentication cùng tài liệu trả về

RESTful API không thực hiện session và cookie, nó thực hiện một access_token cùng với mỗi request. Dữ liệu trả về thường có cấu tạo nlỗi sau:

"data" : "id": "1", "name": "kinhdientamquoc.vn"

Status code

khi họ request một API như thế nào này thường thì sẽ sở hữu vài ba status code để nhận ra sau:

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

Nên thực hiện Version

Luôn áp dụng version nhằm khi chúng ta nên nâng cấp API mà vẫn cung ứng những API cũ.

Xây dựng API cùng với Laravel

Lấy bài toán thiết kế api bên trên Laravel để gia công ví dụ, trước khi bước vào ta tổng quan liêu về Http Request.

HTTP Request

HTTP request có toàn bộ 9 các loại method , 2 các loại được áp dụng thông dụng duy nhất là GET cùng POST

GET: được áp dụng để đưa báo cáo từ bỏ VPS theo URI đã cung cấp.HEAD: như thể với GET mà lại response trả về không tồn tại toàn thân, chỉ tất cả header.POST: gửi ban bố tới sever trải qua những biểu mẫu mã http.PUT: ghi đè tất cả thông tin của đối tượng người sử dụng cùng với hồ hết gì được trình lên.PATCH: ghi đè những thông tin được biến đổi của đối tượng.DELETE: xóa tài nguyên trên VPS.CONNECT: tùy chỉnh cấu hình một liên kết tới VPS theo URI.OPTIONS: biểu thị những tùy lựa chọn giao tiếp cho resource.TRACE: thực hiện một bài xích chạy thử loop – baông xã theo băng thông mang lại resource.

Xem thêm: Kiếm Fame Là Gì ? Bú Fame, Hám Fame, Kiếm Fame Là Gì Trên Mạng Xã Hội

RESTful Route

Viết Api thì sẽ khai báo router vào tệp tin routes/api.php nạm vày áp dụng tệp tin routes/website.php. Các setting mang mang đến tệp tin api.php trong laravel:

Url: gần như route được knhị báo trong file này khoác định bao gồm prefix url là api (ví dụ: kinhdientamquoc.vn/api/products)Middleware: mặc định sẽ tiến hành gán Middleware Group là api, vào tệp tin app/Http/Kernel sẽ thấy 2 middleware trực thuộc Middleware Group: api là throttle (giới hạn request / time) và bindings (mã sản phẩm binding).

Có thể tùy chỉnh cấu hình giá trị mặc định này trong method mapApiRoutes trong file app/Providers/RouteServiceProvider.php

Tạo các route để thực hiện các thao tác làm việc nlỗi CRUD (Create, Read, Update, Delete):

// Lấy danh mục sản phẩmRoute::get("products", "ApiProductController
index")->name("products.index");// Lấy detail sản phẩm theo idRoute::get("products/id", "ApiProductController
store")->name("products.store");// Update info thành phầm theo id# Sử dụng put trường hợp update toàn thể các fieldRoute::put("products/id", "ApiProductController
update")->name("products.update");# Sử dụng patch trường hợp update 1 vài ba fieldRoute::patch("products/id", "ApiProductController
update")->name("products.update");// Xóa sản phẩm theo idRoute::delete("products/id", "ApiProductController
destroy")->name("products.destroy");Mặc định route đã có được gán middleware bindings, nếu như muốn sử dụng mã sản phẩm binding vào controller thì chúng ta sửa lại tsi mê số vào route nhỏng sau:

Route::get("products/product", "ApiProductController
destroy")->name("products.destroy");Ngoài ra trong laravel cũng hỗ trợ họ một cách knhị báo ngắn thêm gọn gàng hơn:

//Nếu không thích sử dụng toàn thể method trong apiResource đông đảo tín đồ có thể chỉ định và hướng dẫn thực hiện 1 vài method bởi hàm onlyRoute::apiResource("products", "ApiProductController")->only(<"index", "show">);//Hoặc nếu còn muốn vứt bỏ đi 1 số method ko cần sử dụng thì có thể áp dụng hàm exceptRoute::apiResource("products", "ApiProductController")->except(<"show", "update">);

Resource Controllers

Tương ứng với các Route RESTful sẽ khai báo sinh sống trên, đặc biệt nếu như cần sử dụng method apiResource thì laravel cũng cung cấp các method xử lý khớp ứng vào controller.

Để tạo nên Resource Controllers chúng ta chạy lệnh sau

php artisan make:controller Api/ProductController -api

File ProductController tạo ra sẽ như sauDường như nếu còn muốn sử dụng Mã Sản Phẩm binding lúc sinh sản Resource Controllers thì cần sử dụng lệnh bên dưới

php artisan make:controller Api/ProductController --api --model=Models/Product

File ProductController tạo nên đang nhỏng sau, chúng ta lưu ý tyêu thích số của những method show, update, destroy sẽ thay đổi 1 chút.

Demo 1 đoạn code dễ dàng trong controller kết hợp với Model binding cùng route apiResource Lúc thành lập API:

all()); } /** * Display the specified resource. * *
return Product */ public function show(Product $product) return $product; /** * Update the specified resource in storage. * *
return bool */ public function update(Request $request, Product $product) return $product->update($request->all()); /** * Remove the specified resource from storage. * *
throws Exception */ public function destroy(Product $product) $product->delete(); }Mặc định Lúc thực hiện route apiResource thì tài liệu trả về đã tự động được chuyển quý phái hình trạng JSON và sẽ sở hữu được status khớp ứng đề xuất chỉ cần return tài liệu ra là được.

Còn nếu như muốn tùy thay đổi status trả về thì hoàn toàn có thể tìm hiểu thêm giải pháp bên dưới gồm sử dụng class IlluminateHttpResponse để đưa status cụ vày fix quý hiếm vào ví như HTTP_OK khớp ứng đang là 200

json($products, Response::HTTP_OK); }}Eloquent Resourceskhi xây dựng API, bạn có thể bắt buộc transform dữ liệu tự controller trước lúc trả về cho những người cần sử dụng vận dụng của chúng ta, laravel cũng đã cung cấp vấn đề đó cùng với Eloquent Resources

Để tạo thành 1 class đổi khác họ chạy lệnh sau

php artisan make:resource Product

File app/Http/Resources/Product.php sẽ có được câu chữ nhỏng sau

Mình vẫn cấu hình thiết lập dữ liệu trả về là chỉ gồm title cùng price

$this->title, "price" => $this->price, >; }}

Ở controller thì mình sẽ sửa lại như sau

all()); return new ProductResource($product); } /** * Display the specified resource. * *
return Product */ public function show(Product $product) return new ProductResource($product); /** * Update the specified resource in storage. * *
return bool */ public function update(Request $request, Product $product) return $product->update($request->all()); /** * Remove sầu the specified resource from storage. * *
throws Exception */ public function destroy(Product $product) $product->delete(); }Ngoài giới hạn dữ liệu trả về nhỏng title hay price, laravel cũng hỗ trợ rất nhiều đồ vật nlỗi thêm relationships, data …, mọi người rất có thể đọc thêm docs bên trên Laravel.

Authorization

Hiện tại gồm 3 chế độ Authorize chính:

HTTPhường. BasicJSON Web Token (JWT)OAuth2

Tùy nằm trong vào service của khách hàng, nhưng mà nên chọn lựa các loại Authorize gồm mức độ phù hợp, cố gắng giữ lại nó càng đơn giản và dễ dàng càng xuất sắc.

CORS Policy

Viết API thì cũng cần được chú ý về CORS là gì?

API Document

Ai cũng biết Việc viết API docs là cần thiết, mặc dù để sở hữu một API docs hoàn hảo cũng tiêu tốn không ít thời hạn. Nhất là trong những lúc dự án nhanh chóng thì gần như người hay chỉ để API docs ở tầm mức khôn xiết cơ phiên bản. Tđắm say khảo thêm giải pháp viết API Document.

API document là một phần tương tự nlỗi Unit Test vậy – rước ngắn thêm nhằm nuôi dài.

Nếu ko được chăm lo kỹ, thì cho tới lúc maintain hoặc biến đổi spec thì kết quả sẽ tương đối thảm khốc, dưới đây là một số trong những chú ý dịp viết docs:

Mô tả đầy đủ về params request: tất cả hồ hết params như thế nào, datatype, require giỏi optional.Nên chỉ dẫn các ví dụ về HTTP. requests với responses với data chuẩn.Cập nhật Docs liên tục, nhằm gần kề tốt nhất với API gồm bất kể biến đổi gì.Format, cú pháp cần được đồng nhất, biểu đạt ví dụ, đúng chuẩn.