Tạo api server với Laravel hướng dẫn trả về dữ liệu json chi tiết 1 sản phẩm, danh sách sản phẩm. Lưu đơn và và giỏ hàng gửi lên từ client…
Mục lục
Trả về sản phẩm theo tham số
Yêu cầu: Tạo chức năng trả về chi tiết 1 sản phẩm theo tham số id. Hoặc trả về danh sách các sản phẩm theo các tham số idLoai, _order, _sort , _limit
1. Tạo route sanpham
Mở file routes/api.php và định nghĩa đường dẫn api
Route::get('sanpham', function(Request $request){ //Trả về chi tiết 1 sản phẩm theo tham số id //code trả về chi tiết 1 sản phẩm //Trả về ds sản phẩm theo tham số: idLoai, _order, _sort, _limit //Code trả về danh sách sản phẩm });
2. Code trả về chi tiết một sản phẩm
Kiểm tra tham số id trên url, nếu có thì lấy rồi và select sản phẩm và trả về dạng json
if( ! $request->has('id')) $id = 0; else { $id = (int) $request->query('id'); $query = DB::table('sanpham')->select( 'id', 'tensp', 'giasp', 'solanxem', 'mota', 'hinh', 'ngay', 'idLoai'); $kq = $query->where("id","=", $id) ->first(); return response()->json($kq, 200); }
Test: Dùng postman: http://localhost:8000/api/sanpham/?id=2
3. Code trả về danh sách sản phẩm
Tiếp nhận các tham số idLoai, _order, _sort, _limit rồi select và trả về danh sách dạng json
//tiếp nhận tham số idLoai if( ! $request->has('idLoai')) $idLoai=0; else $idLoai = (int) $request->query('idLoai'); //tiếp nhận tham số _sort , là field cần sắp xếp if( ! $request->has('_sort') ) $sort=""; else $sort = $request->query('_sort'); if (!in_array($sort, ['giasp', 'solanxem','ngay'])) $sort=""; //tiếp nhận tham số _order , là cách sắp xếp asc|desc if( ! $request->has('_order') ) $order="";// asc|desc else $order = $request->query('_order'); if ($order!="desc") $order="asc"; //tiếp nhận tham số _limit , là số record sẽ lấy if( ! $request->has('_limit')) $limit=0; //tiếp nhận tham số _limit else $limit =(int) $request->query('_limit'); if ($limit<0) $limit=0; //Tạo query $query =DB::table('sanpham') ->select('id','tensp','giasp','solanxem','mota','hinh','ngay','idLoai'); if ($idLoai>0) $query->where("idLoai","=", $idLoai); if($sort!="") $query->orderBy($sort, $order); if ($limit>0) $query->limit($limit); //Chạy query lấy dữ liệu $kq = $query ->get(); $sodong = $query->count(); return response()->json($kq, 200)->header('X-Total-Count', $sodong);
Test: Dùng postman: http://localhost:8000/api/sanpham/?idLoai=2&_limit=3&_sort=solanxem&_order=desc
4. Tiếp nhận tham số _page, trả về 1 page
Thêm code tiếp nhận _page , nếu không có _page thì _page sẽ là 1.
Test bằng postman: http://localhost:8000/api/sanpham/?idLoai=2&_limit=2&_sort=solanxem&_order=desc&_page=1
API tạo đơn hàng mới
Yêu cầu: Tạo route có method là post, trong body phải có hoten, diachi, dienthoai, email . Sau khi chèn vào table donhang sẽ trả về record đầy đủ thông tin, có id của đơn hàng mới chèn
1. Tạo table donhang
CREATE TABLE `donhang` ( `id` int(11) NOT NULL, `hoten` varchar(100) NOT NULL, `diachi` varchar(200) DEFAULT NULL, `dienthoai` varchar(50) DEFAULT NULL, `email` varchar(100) DEFAULT NULL, `status` tinyint(4) DEFAULT 0, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `donhang` ADD PRIMARY KEY (`id`); ALTER TABLE `donhang` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
2. Tạo route donhang
Yêu cầu: Request gửi đến phải có body gồm các field hoten, diachi, dienthoai, email. Sau khi chèn vào database thì lấy id của đơn hàng mới chèn trả về cho client.
Route::post('donhang', function(Request $request){ $arr = request()->post(); // [hoten=>'a',diachi=>'b', dienthoai=>'c', email=>'d'] $ht = (Arr::exists($arr, 'hoten'))? $arr['hoten']:""; $ht = trim(strip_tags($ht)); $dc= (Arr::exists($arr, 'diachi'))? $arr['diachi']:""; $dc = trim(strip_tags($dc)); $dt= (Arr::exists($arr, 'dienthoai'))? $arr['dienthoai']:""; $dt = trim(strip_tags($dt)); $em = (Arr::exists($arr, 'email'))? $arr['email'] :""; $em = trim(strip_tags($em)); $id = DB::table('donhang')->insertGetId( ['hoten'=> $ht, 'diachi'=>$dc, 'dienthoai'=>$dt, 'email'=>$em]); return response()->json( ['id'=> $id, 'hoten'=> $ht, 'diachi'=> $dc, 'dienthoai'=>$dt, 'email'=>$em ], 201); });
Test bằng postman:
API lưu sản phẩm trong giỏ hàng
Yêu cầu: Tạo route có method là post, trong body phải có iddh, idsp, tensp, giasp, soluong. Sau khi chèn vào table donhangchittiet sẽ trả về record đầy đủ thông tin
1. Tạo table donhangchitiet
CREATE TABLE `donhangchitiet` ( `id` int(11) NOT NULL, `iddh` int(111) NOT NULL, `idsp` int(111) NOT NULL, `tensp` varchar(200) DEFAULT NULL, `giasp` int(11) DEFAULT 0, `soluong` int(11) DEFAULT 0, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `donhangchitiet` ADD PRIMARY KEY (`id`); ALTER TABLE `donhangchitiet` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
2. Tạo route donhangchitiet
Route::post('donhangchitiet', function(Request $request){ $arr = request()->post(); //[iddh:1,idsp:5,tensp:"aa",giasp:22,soluong:1 ] $iddh = (Arr::exists( $arr, 'iddh'))? (int) $arr['iddh'] : 0; $idsp = (Arr::exists( $arr, 'idsp'))? (int) $arr['idsp'] : 0; $ten = (Arr::exists($arr, 'tensp'))? $arr['tensp'] : ""; $gia= (Arr::exists( $arr, 'giasp'))? (int) $arr['giasp'] : 0; $sl = (Arr::exists( $arr, 'soluong'))? (int) $arr['soluong'] : 0; if ($sl<=0) $sl=1; $id = DB::table('donhangchitiet')->insertGetId([ 'iddh'=> $iddh,'idsp'=>$idsp,'tensp'=>$ten,'giasp'=>$gia,'soluong'=>$sl ]); return response()->json( ['id'=>$id,'iddh'=> $iddh,'idsp'=>$idsp,'tensp'=>$ten,'giasp'=>$gia,'soluong'=>$sl],201); });
Bài tạo api server với Laravel trên đây là để đáp ứng vài chức năng cơ bản, trả về dữ liệu sản phẩm theo tham số, lưu đơn hàng và giỏ hàng gửi lên từ phía client, bạn có thể dựa vào những gì đã thực hiện để triển khai thêm các chức năng khác nhé…
Xem thêm tài liệu ở trang này Restful API trong Laravel