Restful là gì? Tạo restful api với Laravel 5

Sharing is caring!

Dạo gần đây, tui có build một số RESTful web service (đại khái là tạo một tập hợp các api) để cho một số ứng dụng khác kết nối vào. Nhân tiện, tui sẽ viết một số bài về việc sử dụng Laravel (version lúc đang viết là 5.6) để tạo RESTful api. Kiến thức của tui có bao nhiêu, tui sẽ viết ra bấy nhiêu, mong là giúp được ít nhiều cho các bạn. Vậy Restful là gì? Xem tiếp nào!

Laravel cũng có một framework dạng rút gọn chỉ để làm RESTful, đó là lumen

1. RESTful là gì?

Trước khi viết RESTful api, thì chúng ta cũng cần hiểu cái chữ REST nó là gì để nếu các bạn có đi phỏng vấn xin việc mà bị người ta hỏi thì cũng biết đường mà trả lời.

REST là viết tắt của cụm từ: Respresentational State Transfer. REST dựa vào các verb của HTTP (GET, POST, PUT, DELETE, PATCH, OPTIONS) để truyền và nhận dữ liệu giữa Client và Server. Cùng một url (ví dụ: http://my-domain.com/api/user) hay còn gọi là endpoint, nhưng với GET thì ta có một endpoint, với POST ta lại có một endpoint khác (khác ở đây có nghĩa là cách xử lý và trả dữ liệu về cho client), điều này giúp chúng ta thuận tiện hơn trong việc quản lý các endpoint này, dễ chỉnh sửa và thay đổi hơn so với dùng SOAP.

Đối với một trang web bình thường (ví dụ như là wordpress chẳng hạn), khi web browser gửi một request thông qua cái url như trên thì Server sẽ xử lý và trả về một trang HTML, sau đó web browser nhận và hiển thị trang HTML này ra

Còn đối với RESTful thì client có thể là Web Browser hoặc cũng có thể là một Mobile App, thậm chí là một Web Service khác, thì dữ liệu truyền nhận qua lại chủ yếu là JSON.

Cuối cùng, một điều cần lưu ý là, mối quan hệ giữ Client và Server lúc này là Stateless, có nghĩa là Server không cần biết Client là ai, Server cũng không cần phải lưu session đối với client giống như website “truyền thống”. Server lúc này chỉ cần biết là: à, có một request tới và thỏa một số điều kiện của mình (cần access token chẳng hạn), và mình xử lý và trả dữ liệu cho Client thôi, chấm hết, không day dưa  Happy-Grin

2. Tạo Laravel project:

Trong phạm vi bài này, tui không hướng dẫn chi tiết cái Laravel ra sao nha, chỉ làm nhanh gọn các lệnh thôi sau đó review qua cái cấu trúc thư mục để viết Restful.

Tạo Laravel project:

Đứng ngay thư mục <learn-restful>, tạo app key:

Xong xuôi, các bạn sẽ có cây thư mục như thế này:

Laravel có cung cấp cho chúng ta một cái Web Server nho nhỏ, vừa đủ để test, không cần phải cái Apache luôn. Thử coi cái project có chạy ổn không, ngay tại thư mục <learn-restful> các bạn gõ lệnh:

Sau đó, mở Web Browser lên, gõ: http://localhost:9000 hoặc http://127.0.0.1:9000 xem coi có thấy chữ Laravel to đùng hiện ra không, nếu có thì coi như ta setup project ổn.

Nếu chạy lệnh trên mà không có tham số –port=9000, thì mặc định Server nó sẽ listen ở port 8000

3. Tạo endpoint cho Restful:

Cũng giống như làm web, chúng ta cũng cần phải tạo một cái route để làm endpoint. Trong thư mục routes, các bạn thấy các file sau:

Ở đây chúng ta đang bàn luận về Restful, nên chỉ chú ý đến file api.php thôi, đây là file chứa tất cả các endpoint dùng để xử lý các request từ client. Mở file api.php lên, các bạn thấy nội dung như sau:

Khoan hãy quan tâm đến 3 dòng code từ 16-18, chúng ta sẽ bàn sau. Các bạn chú ý là để nhận request từ client, các bạn phải import thư viện Illuminate\Http\Request nhé bằng từ khóa use

Tới đây, tui muốn tạo một url endpoint như sau: http://localhost:9000/api/hello-world, thì Server sẽ trả về nội dung là “Hello World! Welcome to codingpearls.com”. Mở file api.php, thêm đoạn code như sau:

Hàm Route::get(), có nghĩa là Server sẽ xử lý endpoint này với HTTP verb là GET. tham số thứ nhất chính là url (tạm gọi là part endpoint), tham số thứ 2 chính là một callback function xử lý tương ứng với enpoint này.

Chú ý, các bạn có thấy phân cách giữa domain hoặc subdomain với “hello-world” là chữ “api” không? Tại sao chúng ta không có gõ chữ “api” này trong cái endpoint mà trong cái url lại có. Đáng lẽ phải gõ endpoint là “/api/hello-world” mới đúng chứ? Ở đây các bạn có thể hiểu api chính là prefix của cái endpoint “hello-world”. Giả sử chúng ta có 10 cái endpoint, chẳng lẽ chúng ta lại phãi gõ chữ “api” 10 lần cho 10 cái endpoint à? Kiểu như vầy

Route::get(‘/api/hello-world’, function…)
Route::get(‘/api/hello-world1’, function…)
Route::get(‘/api/hello-world2’, function…)
Route::get(‘/api/hello-world3’, function…)

Để thuận tiện, Laravel mới tạo cái prefix là “api” để cho thuận tiện trong việc viết code, cũng như sửa prefix endpoint, và cái prefix này ở đâu? nó nằm trong file app\Providers\RouteServiceProvider.php.

Mở file này lên, tìm đến hàm mapApiRoutes():

Chính nó, hàm Route::prefix(‘api’), các bạn thử đổi chữ “api” thành chữ khác, ví dụ: “rest-api” chẳng hạn, xong gõ lại cái url là http://localhost:9000/rest-api/hello-world xem sao nhé.

Với Web browser, chúng ta không thể test được với các HTTP verb khác như POST, PUT, DELETE chẳng hạn. Do đó, chúng ta sẽ sử dụng cái app của Chrome là Postman để làm client. Các bạn search bằng từ khóa “chrome postman” rồi cài cái app này vào trình duyệt Chrome nhé. Và sau này sẽ dùng Postman là chính để test cái url endpoint.

Đây là giao diện của Postman:

Bài đầu tiên về RESTful đến đây là kết thúc, hẹn các bạn trong các bài kế tiếp để tìm hiểu sâu hơn về cách login, tạo token, cách sử dụng middleware để verify token, cách nhận json data từ client ..v.v.  Bye

Sharing is caring!

Sử dụng tham số đường dẫn khi tạo Restful url

Vincent Le

Tui là Lê Minh Đạt, tên tiếng anh là Vincent(do thích nhân vật Vincent Valentine, ai từng là fan của trò Final Fantasy VII thì sẽ biết nhân vật này, hehe). Đang tập tành làm một blogger viết về mảng lập trình, mong muốn được chia sẻ những gì đã học được, tích góp được trong 10 năm đi làm thợ code.

shares