Clip 4: Bài 3. Show API (https://www.youtube.com/watch?v=OH8D5pvHWIE&list=PLWTu87GngvNzMPnMblh89ljiGBI9qhviC&index=3)
Với phương thức GET, chúng ta có thể sử dụng trình duyệt để
kiểm tra kết quả trả về của API. Tuy nhiên, với các phương thức POST, PUT/PATCH,
DELETE thì phải sử dụng postman để kiểm tra.
Mối liên hệ giữa các phương thức của REST và thao tác CRUD:
GET – Read
POST – Create
PUT/PATCH – Update
DELETE – Delete
– Tải postman về máy và cài đặt
https://www.postman.com/downloads/
– Mở postman > tạo workspace > đặt tên bất kỳ (ví dụ RESTAPI)
– Thử nhập một REST API (ví dụ: http://localhost/restapi/api/questions/read.php)
để kiểm tra. Bạn sẽ thấy kết quả giống như khi bạn gọi API trên trình duyệt. Xem
hình minh họa.
– Trong model bổ sung thêm hàm show()
[model/questions.php]
public function read(){
$query = "SELECT * FROM cau_hoi ORDER BY id DESC";
$stmt = $this->conn->prepare($query);
$stmt->execute();
return $stmt;
}
//show one item
public function show(){
$query = "SELECT * FROM cau_hoi WHERE id = ? LIMIT 1";
$stmt = $this->conn->prepare($query);
$stmt -> bindParam(1, $this->id);
$stmt->execute();
$row = $stmt -> fetch(PDO::ASSOC);
$this -> noidung = $row['noidung'];
$this -> A = $row['A'];
$this -> B = $row['B'];
$this -> C = $row['C'];
$this -> D = $row['D'];
$this -> dapan = $row['dapan'];
}
– Trong api/questions, tạo thêm tập tin show.php
[api/questions/show.php]
<?php
header('Access-Control-Allow-Origin:*');
header('Content-Type:
application/json');
include_once ("../../config/db.php");
include_once("../../model/questions.php");
$db = new db();
$connect = $db->connect();
$question = new Questions($connect);
// lấy giá trị id gửi lên từ client
$question->id = isset($_GET['id']) ? $_GET['id'] : die();
$question->show();
$item = array(
'id' => $question->id,
'A'
=>
$question->A,
'B'
=>
$question->B,
'C'
=>
$question->C,
'D'
=>
$question->D,
'dapan'
=>
$question->dapan
);
print_r(json_encode($item));
?>
– Clip 5: https://www.youtube.com/watch?v=E5HABpEp0zc&list=PLWTu87GngvNzMPnMblh89ljiGBI9qhviC&index=2
–Tạo dữ liệu bằng REST API
Trong model/questions.php,
tạo thêm hàm create().
[model/questions.php]
…
// create data
public function create(){
$query = "INSERT INTO cau_hoi SET noidung=:noidung, A=:A, B=:B, C=:C, D=:D, dapan=:dapan";
$stmt = $this->conn->prepare($query);
// clean data
$this -> noidung = htmlspecialchars(strip_tags($this->noidung));
$this -> A = htmlspecialchars(strip_tags($this->A));
$this -> B = htmlspecialchars(strip_tags($this->B));
$this -> C = htmlspecialchars(strip_tags($this->C));
$this -> D = htmlspecialchars(strip_tags($this->D));
$this -> dapan = htmlspecialchars(strip_tags($this->dapan));
//bind data
$stmt->bindParam(':noidung', $this->noidung);
$stmt->bindParam(':A', $this->A);
$stmt->bindParam(':B', $this->B);
$stmt->bindParam(':C', $this->C);
$stmt->bindParam(':D', $this->D);
$stmt->bindParam(':dapan', $this->dapan);
if($stmt->execute()){
return true;
}
printf("Error %s.\n", $stmt->error);
return false;
}
Trong api/questions tạo thêm tập tin create.php
[api/questions/create.php]
<?php
header('Access-Control-Allow-Origin:*');
header('Content-Type:
application/json');
header('Access-Control-Allow-Methods:
POST');
header('Access-Control-Allow-Headers:
Access-Control-Allow-Headers, Content-Type, Access-Control-Allow-Methods,
Authorization, X-Request-With ');
include_once ("../../config/db.php");
include_once("../../model/questions.php");
$db = new db();
$connect = $db->connect();
$questions = new Questions($connect);
$data = json_decode(file_get_contents("php://input"));
$questions->noidung = $data->noidung;
$questions->A = $data->A;
$questions->B = $data->B;
$questions->C = $data->C;
$questions->D = $data->D;
$questions->dapan = $data->dapan;
if($questions->create()){
echo json_encode(array('message','Question created'));
}else {
echo json_encode(array('message', 'Question not created'));
}
Để kiểm tra việc nhập dữ liệu từ cửa sổ trình duyệt, gửi về
web server, lưu vào trong cơ sở dữ liệu chúng ta cần phải tạo form. Cách này mất
nhiều thời gian.
Ở phần này, chúng ta sẽ sử dụng phần mềm Postman để nhập dữ
liệu (thay cho form), sau đó gửi dữ liệu về web server, và lưu vào cơ sở dữ liệu.
Mở ứng dụng Postman và đền vào các thông tin cần thiết, xem
hình minh họa.
Giải thích một số mục ở hình trên:
– Chọn phương thức gửi gói HTTP (phương thức của REST): POST
– URL để nhận yêu cầu và xử lý (đường dẫn của REST API): http://localhost/restapi/api/questions/create.php
– Nút gửi gói HTTP về web server (gọi REST API): Send
– Thiết lập các thông tin cho gói HTTP request (dữ liệu gửi
về cho REST API): nhập thông tin cho trường Headers, trường body.
Trong trường Headers, nhập dữ liệu cho một mục “key:value”
là “Content-Transfer-Encoding:appkication/json”
Trong trường body, nhập dữ liệu dạng JSON (đánh dấu vào mục
chọn raw và JSON):
{
"noidung":"Câu 3. The format of a request HTTP includes?",
"A":"A. Request line, Request message, Blank line, Request body",
"B":"B. Request line, Request headers, Blank line, Request body",
"C":"C. Request input, Request headers, Blank line, Request body",
"D":"D. Request line, Request headers, Blank line, Request data",
"dapan":"B"
}
Sau khi nhập dữ liệu xong, bấm nút Send để gửi gói HTTP
request về URL tương ứng (thực thi lời gọi REST API).
Nếu REST API thực thi thành công, một dòng tin sẽ được thêm
vào cơ sở dữ liệu, và web server sẽ trả về thông báo “thành công”.
Connected successfully[
"message",
"Question created"
]
Clip 6: Update và delete dữ liệu, https://www.youtube.com/watch?v=iyLMKJTBesw&list=PLWTu87GngvNzMPnMblh89ljiGBI9qhviC&index=1
– Cập nhật dữ liệu bằng REST API
Trong model/questions.php,
tạo thêm hàm update().
[model/questions.php]
…
// update data
public function update(){
$query = "UPDATE cau_hoi SET noidung=:noidung, A=:A, B=:B, C=:C, D=:D, dapan=:dapan WHERE id=:id";
$stmt = $this->conn->prepare($query);
// clean data
$this -> noidung = htmlspecialchars(strip_tags($this->noidung));
$this -> A = htmlspecialchars(strip_tags($this->A));
$this -> B = htmlspecialchars(strip_tags($this->B));
$this -> C = htmlspecialchars(strip_tags($this->C));
$this -> D = htmlspecialchars(strip_tags($this->D));
$this -> dapan = htmlspecialchars(strip_tags($this->dapan));
$this -> id = htmlspecialchars(strip_tags($this->id));
//bind data
$stmt->bindParam(':noidung', $this->noidung);
$stmt->bindParam(':A', $this->A);
$stmt->bindParam(':B', $this->B);
$stmt->bindParam(':C', $this->C);
$stmt->bindParam(':D', $this->D);
$stmt->bindParam(':dapan', $this->dapan);
$stmt->bindParam(':id', $this->id);
if($stmt->execute()){
return true;
}
printf("Error %s.\n", $stmt->error);
return false;
}
Trong api/questions tạo thêm tập tin update.php
[api/questions/update.php]
<?php
header('Access-Control-Allow-Origin:*');
header('Content-Type:
application/json');
header('Access-Control-Allow-Methods:
PUT');
header('Access-Control-Allow-Headers:
Access-Control-Allow-Headers, Content-Type, Access-Control-Allow-Methods,
Authorization, X-Request-With ');
include_once ("../../config/db.php");
include_once("../../model/questions.php");
$db = new db();
$connect = $db->connect();
$questions = new Questions($connect);
$data = json_decode(file_get_contents("php://input"));
$questions->id = $data->id;
$questions->noidung = $data->noidung;
$questions->A = $data->A;
$questions->B = $data->B;
$questions->C = $data->C;
$questions->D = $data->D;
$questions->dapan = $data->dapan;
if($questions->update()){
echo json_encode(array('message','Question updated'));
}else {
echo json_encode(array('message', 'Question not updated'));
}
?>
[Postman], để ý thông tin ở các vùng tô đỏ trong hình dưới
đây:
Bấm nút Send trên
Postman, kiểm tra thông tin trong cơ sở dữ liệu sẽ thấy đã được cập nhật.
– Xóa dữ liệu bằng REST API
Trong model/questions.php,
tạo thêm hàm delete().
[model/questions.php]
…
// delete data
public function delete(){
$query = "DELETE FROM cau_hoi WHERE id=:id";
$stmt = $this->conn->prepare($query);
// clean data
$this -> id = htmlspecialchars(strip_tags($this->id));
//bind data
$stmt->bindParam(':id', $this->id);
if($stmt->execute()){
return true;
}
printf("Error %s.\n", $stmt->error);
return false;
}
Trong api/questions tạo thêm tập tin delete.php
[api/questions/delete.php]
<?php
header('Access-Control-Allow-Origin:*');
header('Content-Type:
application/json');
header('Access-Control-Allow-Methods:
DELETE');
header('Access-Control-Allow-Headers:
Access-Control-Allow-Headers, Content-Type, Access-Control-Allow-Methods,
Authorization, X-Request-With ');
include_once ("../../config/db.php");
include_once("../../model/questions.php");
$db = new db();
$connect = $db->connect();
$questions = new Questions($connect);
$data = json_decode(file_get_contents("php://input"));
$questions->id = $data->id;
if($questions->delete()){
echo json_encode(array('message','Question deleted'));
}else {
echo json_encode(array('message', 'Question not deleted'));
}
?>
[Postman], để ý thông tin ở các vùng tô đỏ trong hình dưới
đây:
Bấm nút Send trên
Postman, kiểm tra thông tin trong cơ sở dữ liệu sẽ thấy dòng tin có id = 3 đã bị xóa.