API básica com PHP 和 MySQL via PDO para uma Todo List
举例来说,我们可以使用 PHP 或 MySQL 来构建 API 基础,并通过简单的列表扩展 PDO。
前提条件:
- há um servidor de banco de bados escutando em um host e porta conhecidos (se estiver no seu computador, deverá estar em
localhost:3306); - nesse banco de bados,há um esquema criado para a sua aplicação;
- o PHP 安装解释器;
- pdo_mysql 扩展可用于 PHP;
- 这是 PHP 和 API 的主题。
配置数据库
Primeiro,vamos criar uma tabela chamada“任务”没有银行作为塔雷法斯。执行一个连续查询 SQL para criar a tabela:
CREATE TABLE tasks (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
completed BOOLEAN NOT NULL DEFAULT 0
);
配置银行连接
潜在的激光雷达和银行可能会在没有系统的情况下建立联系,并与双方建立联系。
为此,我们将在“database.php”中提供有关银行和银行的信息,以供$conn您使用以获取联系信息。 Insira o seguinte código no arquivo:
<?php
$host = 'localhost';
$db = 'nome_do_banco_de_dados';
$port = 3306;
$user = 'nome_do_usuario';
$pass = 'senha_do_usuario';
try {
$conn = new PDO("mysql:host=$host;port=$port;dbname=$db;charset=utf8", $user, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'Erro na conexão com o banco de dados: ' . $e->getMessage();
exit;
}
可以使用“nome_do_banco_de_dados”、“nome_do_usuario”和“senha_do_usuario”替代值来代替主机,以便满足需要。
测试连接功能,并执行命令php database.php。 Se nenhum resultado for exibido, então está tudo certo.
创建 API(方法 1)
API 的简单形式是用于 CADA 端点的。
获取任务
Crie um arquivo chamado get_tasks.phppara o end quebusca todas as tarefas:
<?php
require 'database.php';
try {
$stmt = $conn->query('SELECT * FROM tasks');
$tasks = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-Type: application/json');
echo json_encode($tasks);
} catch(PDOException $e) {
echo json_encode(['error' => $e->getMessage()]);
}
添加任务
Crie um arquivo chamado add_task.phppara o end que adiciona uma nova tarefa:
<?php
require 'database.php';
if (isset($_POST['title'])) {
$title = $_POST['title'];
try {
$stmt = $conn->prepare('INSERT INTO tasks (title) VALUES (:title)');
$stmt->bindParam(':title', $title);
$stmt->execute();
$taskId = $conn->lastInsertId();
echo json_encode(['id' => $taskId, 'title' => $title, 'completed' => false]);
} catch(PDOException $e) {
echo json_encode(['error' => $e->getMessage()]);
}
} else {
echo json_encode(['error' => 'O título da tarefa é obrigatório']);
}
完成任务
Crie um arquivo chamado complete_task.phppara o end que marca uma tarefa como concluída:
<?php
require 'database.php';
if (isset($_POST['id'])) {
$taskId = $_POST['id'];
try {
$stmt = $conn->prepare('UPDATE tasks SET completed = 1 WHERE id = :id');
$stmt->bindParam(':id', $taskId);
$stmt->execute();
echo json_encode(['success' => true]);
} catch(PDOException $e) {
echo json_encode(['error' => $e->getMessage()]);
}
} else {
echo json_encode(['error' => 'O ID da tarefa é obrigatório']);
}
删除任务
Crie um arquivo chamado delete_task.phppara o end que deleta uma tarefa:
<?php
require 'database.php';
if (isset($_POST['id'])) {
$taskId = $_POST['id'];
try {
$stmt = $conn->prepare('DELETE FROM tasks WHERE id = :id');
$stmt->bindParam(':id', $taskId);
$stmt->execute();
echo json_encode(['success' => true]);
} catch(PDOException $e) {
echo json_encode(['error' => $e->getMessage()]);
}
} else {
echo json_encode(['error' => 'O ID da tarefa é obrigatório']);
}
重要代码
Agora,vamos entend alguns trechos importantes dos códigos acima:
$stmt = $conn->query('SELECT * FROM tasks');
$tasks = $stmt->fetchAll(PDO::FETCH_ASSOC);
- O trecho acima executa uma Consulta SQL para selecionar todas as tarefas da tabela
tasks。 query('SELECT * FROM tasks')执行咨询并返回PDOStatement代表结果的对象。fetchAll(PDO::FETCH_ASSOC)恢复今天作为联合体的结果,onde a chave é o nome da coluna。
if (isset($_POST['title'])) {
$title = $_POST['title'];
// ...
}
title使用超级全局 POST 来验证环境参数$_POST。$_POST['title']在没有必要条件的情况下恢复或恢复参数title。- 必须验证并确保该标题的重要性,才能确保插入的程序前的内容。
$stmt = $conn->prepare('INSERT INTO tasks (title) VALUES (:title)');
$stmt->bindParam(':title', $title);
$stmt->execute();
- 准备好 SQL 指令并插入表格中
tasks。 prepare('INSERT INTO tasks (title) VALUES (:title)')准备 SQL com um parâmetro nomeado 指令:title。bindParam(':title', $title)vincula o valor do parâmetro:titleà variável$title。execute()执行准备说明。
测试
测试一个 API,可以通过 HTTP 协议来配置 PHP(例如 Apache 的 XAMPP)或者 PHP 的本地执行程序,或者通过服务器来执行php -S localhost:8000PHPphp -S 0.0.0.0:8080操作接口(com a porta da sua escolha)。
Uma vez que a API esteja disponível em uma porta, você pode criar requests para os arquivos usando alguma ferramenta de testes de API (insomnia, postman, Thunder client).
Aqui vamos fazer testes usando o Thunder Client, ditamente do VSCode:
Criando API(方法 2 - 语义 HTTP)
PHP 的 API 格式可以使用不同的 HTTP 方法(POST、PUT、DELETE) - 或 HTTP 语义。没有任何例子,vamos 实现了一个 API em um único arquivo。
Para isso, crie um arquivo chamado api.phpe adicione o seguinte código:
<?php
require 'database.php';
// Rota para buscar todas as tarefas
if ($_SERVER['REQUEST_METHOD'] === 'GET' && empty($_GET)) {
try {
$stmt = $conn->query('SELECT * FROM tasks');
$tasks = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-Type: application/json');
echo json_encode($tasks);
} catch(PDOException $e) {
echo json_encode(['error' => $e->getMessage()]);
}
}
// Rota para adicionar uma nova tarefa
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$data = json_decode(file_get_contents('php://input'), true);
if (empty($data['title'])) {
echo json_encode(['error' => 'O título da tarefa é obrigatório']);
exit;
}
$title = $data['title'];
try {
$stmt = $conn->prepare('INSERT INTO tasks (title) VALUES (:title)');
$stmt->bindParam(':title', $title);
$stmt->execute();
$taskId = $conn->lastInsertId();
echo json_encode(['id' => $taskId, 'title' => $title, 'completed' => false]);
} catch(PDOException $e) {
echo json_encode(['error' => $e->getMessage()]);
}
}
// Rota para marcar uma tarefa como concluída
if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
$data = json_decode(file_get_contents('php://input'), true);
if (empty($data['id'])) {
echo json_encode(['error' => 'O ID da tarefa é obrigatório']);
exit;
}
$taskId = $data['id'];
try {
$stmt = $conn->prepare('UPDATE tasks SET completed = 1 WHERE id = :id');
$stmt->bindParam(':id', $taskId);
$stmt->execute();
echo json_encode(['success' => true]);
} catch(PDOException $e) {
echo json_encode(['error' => $e->getMessage()]);
}
}
// Rota para deletar uma tarefa
if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {
$data = json_decode(file_get_contents('php://input'), true);
if (empty($data['id'])) {
echo json_encode(['error' => 'O ID da tarefa é obrigatório']);
exit;
}
$taskId = $data['id'];
try {
$stmt = $conn->prepare('DELETE FROM tasks WHERE id = :id');
$stmt->bindParam(':id', $taskId);
$stmt->execute();
echo json_encode(['success' => true]);
} catch(PDOException $e) {
echo json_encode(['error' => $e->getMessage()]);
}
}
A API possui quatro rotas:
GET: /api.php - retorna todas as tarefas
POST: /api.php - adiciona uma nova tarefa
PUT: /api.php - marca uma tarefa como concluída
DELETE: /api.php - deleta uma tarefa
重要代码
Além dos trechos de códigos que vimos na front, aqui temos um código importante:
$data = json_decode(file_get_contents('php://input'), true);
这是 JSON 和与 PHP 关联的数组解码所必需的。必须将其作为塔雷法列表中的歌剧来实现。
测试
在睾丸前部的过程中,可以根据夏季使用的情况进行精确的配置。
接下来,使用 Thunder 客户端打印:
重要!
依赖于 API 实现,以一种共同的方式请求 vai mudar。没有primeiro caso,o request foi feito usando o body do request,enquanto no segundo os bados foramenvados via json。
fetch这是使用JavaScript 和 os headers的 API所产生的影响。



