Tạo api server với Laravel

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