Skip to content

RESTful API 开发

使用 PHP 构建 API:基本的 RESTful 接口开发

定义 RESTful API 路由:

RESTful API 基于 HTTP 方法(GET、POST、PUT、DELETE 等)和资源路径定义操作。

php
// 简单的路由示例
$requestMethod = $_SERVER['REQUEST_METHOD'];
$requestPath = $_SERVER['REQUEST_URI'];

if ($requestMethod === 'GET' && $requestPath === '/api/users') {
    // 处理获取所有用户的请求
} elseif ($requestMethod === 'POST' && $requestPath === '/api/users') {
    // 处理创建新用户的请求
}

处理请求:

根据请求方法调用相应的处理逻辑。

php
switch ($requestMethod) {
    case 'GET':
        // 处理 GET 请求
        break;
    case 'POST':
        // 处理 POST 请求
        break;
    case 'PUT':
        // 处理 PUT 请求
        break;
    case 'DELETE':
        // 处理 DELETE 请求
        break;
    default:
        http_response_code(405); // 方法不允许
        break;
}

返回响应:

设置 HTTP 状态码,并输出 JSON 数据。

php
header('Content-Type: application/json');
$response = ['status' => 'success', 'data' => $data];
echo json_encode($response);

数据格式:JSON 与 XML

JSON 格式:

JSON 是 RESTful API 最常用的数据格式,PHP 提供了 json_encode()json_decode() 函数来处理 JSON 数据。

php
// 返回 JSON 响应
header('Content-Type: application/json');
$data = ['id' => 1, 'name' => 'John Doe'];
echo json_encode($data);

XML 格式:

虽然较少使用,XML 仍然在某些场景中被应用。可以使用 PHP 的 SimpleXML 来处理 XML 数据。

php
// 返回 XML 响应
header('Content-Type: application/xml');
$xml = new SimpleXMLElement('<user/>');
$xml->addChild('id', 1);
$xml->addChild('name', 'John Doe');
echo $xml->asXML();

数据格式协商:

根据 Accept 请求头决定返回数据的格式。

php
$accept = $_SERVER['HTTP_ACCEPT'];
if (strpos($accept, 'application/json') !== false) {
    header('Content-Type: application/json');
    echo json_encode($data);
} elseif (strpos($accept, 'application/xml') !== false) {
    header('Content-Type: application/xml');
    // 生成 XML 输出...
}

API 鉴权:JWT(JSON Web Token)

什么是 JWT:

JWT 是一种用于在各方之间安全传输信息的开放标准(RFC 7519),通常用于 API 的身份验证和授权。它包含三个部分:Header(头部)、Payload(负载)和 Signature(签名)。

生成 JWT:

使用 PHP 中的 firebase/php-jwt 库生成 JWT。

bash
composer require firebase/php-jwt
php
use \Firebase\JWT\JWT;

$key = "your_secret_key";
$payload = [
    'iss' => 'http://example.org',
    'aud' => 'http://example.com',
    'iat' => time(),
    'exp' => time() + 3600, // 1 小时过期
    'user_id' => 1
];

$jwt = JWT::encode($payload, $key, 'HS256');
echo "JWT: " . $jwt;

验证 JWT:

验证客户端发送的 JWT,检查其有效性和签名。

php
try {
    $decoded = JWT::decode($jwt, $key, ['HS256']);
    $userId = $decoded->user_id;
    // 继续处理 API 请求
} catch (Exception $e) {
    // 无效的 JWT
    http_response_code(401);
    echo json_encode(['message' => 'Unauthorized']);
}

在请求中传递 JWT:

JWT 通常通过 HTTP 头部传递,例如 Authorization 头部。

http
Authorization: Bearer <JWT_TOKEN>

使用中间件进行身份验证:

创建一个中间件函数来检查 JWT 是否存在并有效。

php
function authenticate() {
    $headers = apache_request_headers();
    if (!isset($headers['Authorization'])) {
        http_response_code(401);
        exit(json_encode(['message' => 'Unauthorized']));
    }

    $jwt = str_replace('Bearer ', '', $headers['Authorization']);
    try {
        $decoded = JWT::decode($jwt, $key, ['HS256']);
        // 设置当前用户信息
        $GLOBALS['currentUser'] = $decoded->user_id;
    } catch (Exception $e) {
        http_response_code(401);
        exit(json_encode(['message' => 'Unauthorized']));
    }
}
编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!