在当今的互联网时代,前后端分离已经成为主流,而 RESTful API 作为一种标准化的接口设计方式,被广泛应用于 Web 开发。很多人对 RESTful API 的概念有些模糊,不知道它到底是干嘛的,也不知道怎么设计一个合理的 API。本篇文章就用大白话,把 RESTful API 的核心知识讲清楚,并且带你一步步实现一个 RESTful API。
首先,我们拆开来看:
合起来,RESTful API 就是一种基于 HTTP 设计的接口风格,让前端和后端能清晰、标准地进行数据交互。它强调的是:
/users/1
代表 ID 为 1 的用户。GET /users
获取所有用户GET /users/1
获取 ID 为 1 的用户POST /users
创建新用户PUT /users/1
更新 ID 为 1 的用户DELETE /users/1
删除 ID 为 1 的用户这种风格的好处在于直观、清晰、符合 HTTP 规范,前端看到接口文档就知道该怎么调用,不需要写一堆 action=add_user
之类的乱七八糟的参数。
要设计一个合理的 RESTful API,我们需要遵循以下原则:
API 里的 URL 代表的是资源,所以 URL 里应该是名词,而不是动词。例如:
✅ GET /articles
获取所有文章
❌ GET /getArticles
这里的 get
是多余的
✅ POST /users
创建新用户
❌ POST /createUser
这里的 create
也是多余的
因为 HTTP 方法本身已经表达了对资源的操作,所以 URL 里就不要再加 get
、create
、update
这些动词了。
RESTful API 强调使用标准的 HTTP 方法:
GET
读取数据POST
创建数据PUT
更新数据DELETE
删除数据如果接口是 GET /users
,一看就知道是获取用户数据,而 DELETE /users/1
,一看就知道是删除 ID 为 1 的用户,完全不需要额外解释,清晰直观。
API 调用成功或者失败,不应该只返回 200 OK
,而应该使用合适的状态码:
200 OK
:请求成功,比如 GET /users
201 Created
:资源创建成功,比如 POST /users
204 No Content
:删除成功但没有返回数据,比如 DELETE /users/1
400 Bad Request
:请求参数有误,比如 POST /users
但缺少 name
字段401 Unauthorized
:未授权,比如访问需要登录的接口但没带 Token403 Forbidden
:没有权限,比如普通用户想访问管理员页面404 Not Found
:资源不存在,比如访问 GET /users/9999
但 ID 9999 的用户不存在500 Internal Server Error
:服务器出错,比如数据库崩了状态码用得好,前端开发者看到错误码就能知道问题出在哪里,不用瞎猜。
API 返回的数据格式应该统一,通常用 JSON,因为 JSON 结构清晰、体积小、解析快,几乎所有编程语言都支持。比如:
{
"code": 200,
"message": "请求成功",
"data": {
"id": 1,
"name": "张三",
"email": "zhangsan@example.com"
}
}
如果接口出错:
{
"code": 400,
"message": "缺少必填字段 name"
}
返回格式统一,前端就不用到处写 if (res.status === 200)
这种判断逻辑,直接检查 code
值就行了。
下面,我们用 PHP + MySQL 搭建一个简单的 RESTful API,假设我们要做一个用户管理系统,支持:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
<?php
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
创建 api.php
:
<?php
require 'db.php';
$method = $_SERVER['REQUEST_METHOD'];
$uri = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
if ($uri[0] !== 'users') {
http_response_code(404);
echo json_encode(["message" => "Not Found"]);
exit;
}
switch ($method) {
case 'GET':
if (isset($uri[1])) {
getUser($pdo, $uri[1]);
} else {
getAllUsers($pdo);
}
break;
case 'POST':
createUser($pdo);
break;
case 'PUT':
if (isset($uri[1])) {
updateUser($pdo, $uri[1]);
} else {
echo json_encode(["message" => "Missing ID"]);
}
break;
case 'DELETE':
if (isset($uri[1])) {
deleteUser($pdo, $uri[1]);
} else {
echo json_encode(["message" => "Missing ID"]);
}
break;
default:
http_response_code(405);
echo json_encode(["message" => "Method Not Allowed"]);
}
?>
function getAllUsers($pdo) {
$stmt = $pdo->query("SELECT * FROM users");
echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
}
function getUser($pdo, $id) {
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
echo json_encode($stmt->fetch(PDO::FETCH_ASSOC));
}
function createUser($pdo) {
$data = json_decode(file_get_contents("php://input"), true);
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$data['name'], $data['email']]);
echo json_encode(["message" => "User created"]);
}
function updateUser($pdo, $id) {
$data = json_decode(file_get_contents("php://input"), true);
$stmt = $pdo->prepare("UPDATE users SET name = ?, email = ? WHERE id = ?");
$stmt->execute([$data['name'], $data['email'], $id]);
echo json_encode(["message" => "User updated"]);
}
function deleteUser($pdo, $id) {
$stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
$stmt->execute([$id]);
echo json_encode(["message" => "User deleted"]);
}
RESTful API 的核心就是“资源 + HTTP 方法”,只要掌握这个思路,设计 API 就很简单了!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。