API nhìn chung đơn giản là các hàm xử lý, nhận các Request gởi đến từ Client và Response trả về từ Server theo định dạng JSON hoặc XML hoặc định dạng nào đó. Tuy nhiên khác biệt giữa route
Để phân biệt rõ ràng giữa các Step 5: tạo action
web
và route api
thường như sau:
Route Web | Route API | |
URL | Đường dẫn thân thiện với Người dùng cuối. Ví dụ:
|
Đường dẫn thường phứt tạp, đặt theo quy cách đánh số phiên bản dành cho Lập trình viên sử dụng. Thường có tiền tố /api ở đầu. Ví dụ:
|
Xác thực | Sử dụng FORM Đăng nhập thông thường | Sử dụng Token để chứng thực. Thường là JWT Token |
route
cho Web và API, trong Laravel đã phân định sẵn 2 file cấu hình dành riêng cho các loại route
này:
routes/web.php
: là file cấu hình quy định các route dành cho Webroutes/api.php
: là file cấu hình quy định các route dành cho API. Khi sử dụng các route này thì mặc định đường dẫn URL sẽ có tiền tố/api/url-route-cua-ban
Ví dụ Tạo chức năng thống kê Top 3 sản phẩm mới nhất
Step 1: tạo controller quản lý các API
Thực thi câu lệnhphp artisan make:controller Api/ApiController
Step 2: tạo route API
- Hiệu chỉnh file
routes/api.php
- Bổ sung code đăng ký route API
<?php use App\Http\Controllers\Api\ApiController; Route::get('/thongke/top3_sanpham_moinhat', [ApiController::class, 'thongke_top3_sanpham_moinhat'])->name('api.thongke.top3_sanpham_moinhat');
Step 3: viết action lấy dữ liệu thống kê và trả về Response theo định dạng JSON
- Hiệu chỉnh file
app/Http/Controllers/Api/ApiController
- Bổ sung action
thongke_top3_sanpham_moinhat()
<?php use DB; public function thongke_top3_sanpham_moinhat() { // Sử dụng Query Builder // Query top 3 loại sản phẩm (có sản phẩm) mới nhất $ds_top3_newest_loaisanpham = DB::table('cusc_sanpham') ->join('cusc_loai', 'cusc_loai.l_ma', '=', 'cusc_sanpham.l_ma') ->orderBy('l_capNhat')->take(3)->get(); return response()->json(array( 'code' => 200, 'result' => $ds_top3_newest_loaisanpham, )); }
Step 4: tạo route hiển thị trang Thống kê bên Frontend
- Hiệu chỉnh file
routes/web.php
Route::get('/thongke', 'Frontend\FrontendController@thongke')->name('frontend.pages.thongke');
Step 5: tạo action thongke()
hiển thị view trong Frontend
- Hiệu chỉnh file
Frontend/FrontendController.php
public function thongke() { // Hiển thị view Thống kê return view('frontend.pages.thongke'); }
Step 6: tạo view Thống kê số liệu
- Tạo file
resources/views/frontend/pages/thongke.blade.php
{{-- View này sẽ kế thừa giao diện từ `frontend.layouts.master` --}} @extends('frontend.layouts.master') {{-- Thay thế nội dung vào Placeholder `title` của view `frontend.layouts.master` --}} @section('title') Thống kê số liệu Shop Hoa tươi - Sunshine @endsection {{-- Thay thế nội dung vào Placeholder `custom-css` của view `frontend.layouts.master` --}} @section('custom-css') <style> .img-hinhdaidien { width: 50px; height: 50px; } </style> @endsection {{-- Thay thế nội dung vào Placeholder `main-content` của view `frontend.layouts.master` --}} @section('main-content') <div class="container"> <h1 class="text-center">Thống kê Số liệu Shop Hoa Tươi</h1> <div id="thongke_sanpham" ng-controller="thongKeSanPhamController"> <h2>Thống kê về Sản phẩm</h2> <div class="card card-info"> <div class="card-header">Top 3 sản phẩm mới nhất</div> <div class="card-body"> <table class="table table-bordered"> <thead> <tr> <td>STT</td> <td>Hình đại diện</td> <td>Tên sản phẩm</td> <td>Giá</td> </tr> </thead> <tbody> <tr ng-repeat="sp in danhsach_top3_sanpham_moinhat"> <td><% $index + 1 %></td> <td> <img ng-src="/storage/photos/<% sp.sp_hinh %>" class="img-hinhdaidien"/></td> <td><% sp.sp_ten %></td> <td><% sp.sp_giaBan | number:0 %></td> </tr> </tbody> </table> </div> </div> </div> </div> @endsection {{-- Thay thế nội dung vào Placeholder `custom-scripts` của view `frontend.layouts.master` --}} @section('custom-scripts') <script> // Khai báo controller `thongKeSanPhamController` app.controller('thongKeSanPhamController', function($scope, $http) { // Dữ liệu $scope.danhsach_top3_sanpham_moinhat = []; // sử dụng service $http của AngularJS để gởi request GET đến route `api.thongke.top3_sanpham_moinhat` $http({ url: "{{ route('api.thongke.top3_sanpham_moinhat') }}", method: "GET" }).then(function successCallback(response) { // Nếu gởi request thành công thì chuyển dữ liệu sang cho AngularJS hiển thị $scope.danhsach_top3_sanpham_moinhat = response.data.result; console.log(response.data.result); console.log($scope.danhsach_top3_sanpham_moinhat); }, function errorCallback(response) { // Lấy dữ liệu không thành công, thông báo lỗi cho khách hàng biết swal('Có lỗi trong quá trình lấy dữ liệu!', 'Vui lòng thử lại sau vài phút.', 'error'); console.log(response); }); }); </script> @endsection
Bài tập
Viết API thống kê số liệu và hiển thị giao diện bằng AngularJS
- Thống kê danh sách các sản phẩm nào đã bán gần hết số lượng (số lượng < 10 xem như gần hết), để Chủ SHOP nhập thêm hàng về?
- Hình thức thanh toán phổ biến nhất là gì?
- Tìm top 3 Khách hàng mua nhiều nhất trong năm nay để tri ân khách hàng?
- Tìm nhà cung cấp không bán được sản phẩm nào trong Hệ thống?
Thực hiện trang Tìm kiếm Sản phẩm theo nhiều tiêu chí (Tên, Giá bán, ...)
Gợi ý các bước thực hiện: Step 1: Tạo API- Tạo API GET tìm kiếm sản phẩm theo nhiều tiêu chí (mỗi tiêu chí là một tham số truyền vào). Ví dụ: ?search_by_name=""&search_by_price=""
- Thực hiện action() để tạo câu truy vấn SQL với các tiêu chí có được
- Thực thi SQL và trả về dữ liệu JSON
Mục lục
Chương trình học
- Bức tranh Tổng thể về Lập trình WEB
-
Giới thiệu, cài đặt, cấu hình môi trường lập trình
9
- Cài đặt web server XAMPP #84
- Cài đặt công cụ truy vấn database HeidiSQL #85
- Cài đặt Composer để quản lý các gói thư viện trong PHP #86
- Cài đặt trình soạn thảo code Visual Studio Code IDE #64
- Tạo tên miền ảo trên máy cục bộ (virtual host on localhost) bằng XAMPP #107
- Cài đặt nền tảng quản lý Source Code sử dụng GIT #1030
- Cài đặt công cụ quản lý Source Code TortoiseGit #1045
- Cài đặt chế độ Debug PHP với Visual Studio Code #8066
- Tạo chứng chỉ SSL trên Localhost #10399
- Tập làm quen với quản lý source code bằng GitHub 3
- Cài đặt framework Laravel 1
- Tìm hiểu mô hình kiến trúc MVC vận hành trong framework Laravel 4
- Sử dụng Template Engine để trình diễn nội dung trong các VIEW 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế CSDL
7
- Phân tích các yêu cầu, nghiệp vụ của khách hàng #68
- Mô hình thiết kế CSDL mẫu Sunshine #69
- Khởi tạo database sunshine, thiết lập kết nối CSDL trong Laravel #1143
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục phẳng #70
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục có liên kết khóa ngoại #1157
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục phẳng #71
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục có liên kết khóa ngoại #7851
- Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Ánh xạ CSDL và Laravel 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Backend
20
- Thiết kế bố cục (layouts) cho giao diện Backend #72
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (index) #135
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (create) #137
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (edit) #138
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (delete) #139
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Index #75
- Lưu đồ Upload file từ Client lên Server #2229
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Create #108
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Edit #87
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Delete #88
- Xây dựng danh mục Sản phẩm có chức năng upload nhiều Hình ảnh cùng lúc #9259
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Bổ sung menu vào sidebar #104
- Xây dựng chức năng xuất biểu mẫu và In ấn trực tiếp trên web #78
- Xây dựng chức năng xuất Excel #76
- Xây dựng chức năng xuất PDF #77
- Tạo chức năng Đăng nhập #1870
- Lưu đồ Kiểm tra ràng buộc dữ liệu (Validation) #2205
- Kiểm tra ràng buộc dữ liệu (Validation) phía Client #2206
- Kiểm tra ràng buộc dữ liệu (Validation) phía Server #2207
- Bài tập tổng hợp - Tạo các chức năng Backend cho trang web đọc Truyện Tranh và Tiểu Thuyết Online sử dụng Laravel framework #9312
-
AngularJS
7
- AngularJS là gì? Cài đặt AngularJS và cú pháp sử dụng AngularJS #95
- Cách mô hình kiến trúc MVC vận hành trong AngularJS #96
- Cách sử dụng AngularJS Controller, Scope #98
- Cách sử dụng AngularJS Directive #97
- Cách sử dụng AngularJS Event #100
- Cách sử dụng AngularJS Filter #99
- Cách sử dụng AngularJS Validation #101
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Frontend sử dụng AngularJS
11
- Thiết kế bố cục (layouts) cho giao diện Frontend #80
- Tích hợp AngularJS vào framework Laravel #102
- Tạo giao diện trang chủ (index) #81
- Tạo giao diện trang Giới thiệu (about) #109
- Tạo giao diện trang Liên hệ (contact) #114
- Tạo trang danh sách Sản phẩm (product) #110
- Tạo nút Thêm vào giỏ hàng cho từng sản phẩm (add-to-cart) #112
- Tạo trang Chi tiết Sản phẩm (product-detail) #111
- Tạo giỏ hàng (cart sidebar) #82
- Tạo trang thanh toán (checkout) #83
- Tạo đơn hàng và gởi mail xác nhận #103
-
Bonus
9
- Đa ngôn ngữ trong Laravel #115
- Tạo báo cáo với biểu đồ ChartJS #116
- Tạo khung chọn Ngày tháng cho dự án #2431
- Tạo các trang thông báo lỗi tương ứng STATUS CODE #117
- Kiểm tra ứng dụng với tunnel ảo NGROK #2418
- Phân trang trong Laravel #2436
- Bổ sung khung xem Hình ảnh trước khi upload (preview image upload) #2439
- Tạo API trong Laravel và sử dụng AngularJS để hiển thị giao diện #9385
- Cách tự động sinh Ảnh nhiều kích cỡ (Automatic resize image) khi upload file Ảnh #9970
- Danh sách Đồ án xây dựng trang web sử dụng LARAVEL 2
- Tài liệu tham khảo 3
- Thực hiện Đồ án 1
Các bài học
Bài học trước Bài học tiếp theo
Chương trình học
Bao gồm Module, Chương, Bài học, Bài tập, Kiểm tra...Chương trình học
- Bức tranh Tổng thể về Lập trình WEB
-
Giới thiệu, cài đặt, cấu hình môi trường lập trình
9
- Cài đặt web server XAMPP #84
- Cài đặt công cụ truy vấn database HeidiSQL #85
- Cài đặt Composer để quản lý các gói thư viện trong PHP #86
- Cài đặt trình soạn thảo code Visual Studio Code IDE #64
- Tạo tên miền ảo trên máy cục bộ (virtual host on localhost) bằng XAMPP #107
- Cài đặt nền tảng quản lý Source Code sử dụng GIT #1030
- Cài đặt công cụ quản lý Source Code TortoiseGit #1045
- Cài đặt chế độ Debug PHP với Visual Studio Code #8066
- Tạo chứng chỉ SSL trên Localhost #10399
- Tập làm quen với quản lý source code bằng GitHub 3
- Cài đặt framework Laravel 1
- Tìm hiểu mô hình kiến trúc MVC vận hành trong framework Laravel 4
- Sử dụng Template Engine để trình diễn nội dung trong các VIEW 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế CSDL
7
- Phân tích các yêu cầu, nghiệp vụ của khách hàng #68
- Mô hình thiết kế CSDL mẫu Sunshine #69
- Khởi tạo database sunshine, thiết lập kết nối CSDL trong Laravel #1143
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục phẳng #70
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục có liên kết khóa ngoại #1157
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục phẳng #71
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục có liên kết khóa ngoại #7851
- Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Ánh xạ CSDL và Laravel 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Backend
20
- Thiết kế bố cục (layouts) cho giao diện Backend #72
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (index) #135
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (create) #137
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (edit) #138
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (delete) #139
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Index #75
- Lưu đồ Upload file từ Client lên Server #2229
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Create #108
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Edit #87
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Delete #88
- Xây dựng danh mục Sản phẩm có chức năng upload nhiều Hình ảnh cùng lúc #9259
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Bổ sung menu vào sidebar #104
- Xây dựng chức năng xuất biểu mẫu và In ấn trực tiếp trên web #78
- Xây dựng chức năng xuất Excel #76
- Xây dựng chức năng xuất PDF #77
- Tạo chức năng Đăng nhập #1870
- Lưu đồ Kiểm tra ràng buộc dữ liệu (Validation) #2205
- Kiểm tra ràng buộc dữ liệu (Validation) phía Client #2206
- Kiểm tra ràng buộc dữ liệu (Validation) phía Server #2207
- Bài tập tổng hợp - Tạo các chức năng Backend cho trang web đọc Truyện Tranh và Tiểu Thuyết Online sử dụng Laravel framework #9312
-
AngularJS
7
- AngularJS là gì? Cài đặt AngularJS và cú pháp sử dụng AngularJS #95
- Cách mô hình kiến trúc MVC vận hành trong AngularJS #96
- Cách sử dụng AngularJS Controller, Scope #98
- Cách sử dụng AngularJS Directive #97
- Cách sử dụng AngularJS Event #100
- Cách sử dụng AngularJS Filter #99
- Cách sử dụng AngularJS Validation #101
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Frontend sử dụng AngularJS
11
- Thiết kế bố cục (layouts) cho giao diện Frontend #80
- Tích hợp AngularJS vào framework Laravel #102
- Tạo giao diện trang chủ (index) #81
- Tạo giao diện trang Giới thiệu (about) #109
- Tạo giao diện trang Liên hệ (contact) #114
- Tạo trang danh sách Sản phẩm (product) #110
- Tạo nút Thêm vào giỏ hàng cho từng sản phẩm (add-to-cart) #112
- Tạo trang Chi tiết Sản phẩm (product-detail) #111
- Tạo giỏ hàng (cart sidebar) #82
- Tạo trang thanh toán (checkout) #83
- Tạo đơn hàng và gởi mail xác nhận #103
-
Bonus
9
- Đa ngôn ngữ trong Laravel #115
- Tạo báo cáo với biểu đồ ChartJS #116
- Tạo khung chọn Ngày tháng cho dự án #2431
- Tạo các trang thông báo lỗi tương ứng STATUS CODE #117
- Kiểm tra ứng dụng với tunnel ảo NGROK #2418
- Phân trang trong Laravel #2436
- Bổ sung khung xem Hình ảnh trước khi upload (preview image upload) #2439
- Tạo API trong Laravel và sử dụng AngularJS để hiển thị giao diện #9385
- Cách tự động sinh Ảnh nhiều kích cỡ (Automatic resize image) khi upload file Ảnh #9970
- Danh sách Đồ án xây dựng trang web sử dụng LARAVEL 2
- Tài liệu tham khảo 3
- Thực hiện Đồ án 1
Bài học trước Bài học tiếp theo
Menu Tiện ích
Menu Hướng dẫn Học tập
❤🧡💛💚💙💜 Học là phải THỰC HÀNH ❤🧡💛💚💙💜
Thực hiện các bước tuần tự theo nội dung Bài học nhé!