• php中RESTful API使用


    1、RESTful AP是什么

    RESTful API是一种软件架构风格

    RESTful API基于HTTP协议,并遵循一系列约定和原则。它的设计理念是将资源(Resource)作为核心概念,并通过一组统一的接口对资源进行操作。API的资源通常通过URL进行标识,而HTTP方法(如GET、POST、PUT、DELETE)则用于定义对这些资源的不同操作。

    2、RESTful API的特点包括:
    1. 独立性:RESTful API是无状态的,即请求之间不会相互依赖。每个请求都是独立的,并应该包含足够的信息来完成所需的操作。
    2. 统一接口:RESTful API使用统一的HTTP方法来操作资源,包括GET(获取资源)、POST(创建资源)、PUT(更新资源)和DELETE(删除资源)等。
    3. 资源导向:RESTful API将每个资源都视为一个唯一的URL,通过URL来标识和定位资源。资源可以是任何事物,如用户、订单、商品等。
    4. 可伸缩性:RESTful API支持水平扩展,可以通过增加更多的服务器来处理更多的请求,以应对高负载情况。
    5. 缓存支持:RESTful API支持缓存机制,可以提高系统的性能和可扩展性。 通过使用RESTful API,不同的应用程序可以通过HTTP协议进行通信,实现资源的共享和协作。它已成为现代Web开发中常用的技术标准,广泛应用于各种互联网服务和移动应用的开发中。

    3、php中代码实现
    1、统一入口
    1. // 获取请求的URL路径和方法
    2. $requestUrl = $_SERVER['REQUEST_URI'];
    3. $requestMethod = $_SERVER['REQUEST_METHOD'];
    4. // 处理请求
    5. if ($requestMethod === 'GET') {
    6. handleGetRequest($requestUrl);
    7. } elseif ($requestMethod === 'POST') {
    8. handlePostRequest($requestUrl);
    9. } elseif ($requestMethod === 'PUT') {
    10. handlePutRequest($requestUrl);
    11. } elseif ($requestMethod === 'DELETE') {
    12. handleDeleteRequest($requestUrl);
    13. } else {
    14. sendResponse(405, 'Method Not Allowed');
    15. }
    2、获取资源get
    1. // 处理GET请求
    2. function handleGetRequest($requestUrl) {
    3. if ($requestUrl === '/users') {
    4. $users = ['user1', 'user2', 'user3'];
    5. sendResponse(200, $users);
    6. } elseif (preg_match('/\/users\/(\d+)/', $requestUrl, $matches)) {
    7. $userId = $matches[1];
    8. $user = getUserById($userId);
    9. if ($user) {
    10. sendResponse(200, $user);
    11. } else {
    12. sendResponse(404, 'User not found');
    13. }
    14. } else {
    15. sendResponse(404, 'Not Found');
    16. }
    17. }
    3、POST(创建资源)
    1. // 处理POST请求
    2. function handlePostRequest($requestUrl) {
    3. if ($requestUrl === '/users') {
    4. $username = $_POST['username'];
    5. // 处理创建用户逻辑
    6. sendResponse(201, 'User created successfully');
    7. } else {
    8. sendResponse(404, 'Not Found');
    9. }
    10. }
    4、PUT(更新资源)
    1. // 处理PUT请求
    2. function handlePutRequest($requestUrl) {
    3. if (preg_match('/\/users\/(\d+)/', $requestUrl, $matches)) {
    4. $userId = $matches[1];
    5. $user = getUserById($userId);
    6. if ($user) {
    7. // 处理更新用户逻辑
    8. sendResponse(200, 'User updated successfully');
    9. } else {
    10. sendResponse(404, 'User not found');
    11. }
    12. } else {
    13. sendResponse(404, 'Not Found');
    14. }
    15. }
    5、DELETE(删除资源)
    1. // 处理DELETE请求
    2. function handleDeleteRequest($requestUrl) {
    3. if (preg_match('/\/users\/(\d+)/', $requestUrl, $matches)) {
    4. $userId = $matches[1];
    5. $user = getUserById($userId);
    6. if ($user) {
    7. // 处理删除用户逻辑
    8. sendResponse(200, 'User deleted successfully');
    9. } else {
    10. sendResponse(404, 'User not found');
    11. }
    12. } else {
    13. sendResponse(404, 'Not Found');
    14. }
    15. }
    6、完整代码
    1. // 获取请求的URL路径和方法
    2. $requestUrl = $_SERVER['REQUEST_URI'];
    3. $requestMethod = $_SERVER['REQUEST_METHOD'];
    4. // 处理请求
    5. if ($requestMethod === 'GET') {
    6. handleGetRequest($requestUrl);
    7. } elseif ($requestMethod === 'POST') {
    8. handlePostRequest($requestUrl);
    9. } elseif ($requestMethod === 'PUT') {
    10. handlePutRequest($requestUrl);
    11. } elseif ($requestMethod === 'DELETE') {
    12. handleDeleteRequest($requestUrl);
    13. } else {
    14. sendResponse(405, 'Method Not Allowed');
    15. }
    16. // 处理GET请求
    17. function handleGetRequest($requestUrl) {
    18. if ($requestUrl === '/users') {
    19. $users = ['user1', 'user2', 'user3'];
    20. sendResponse(200, $users);
    21. } elseif (preg_match('/\/users\/(\d+)/', $requestUrl, $matches)) {
    22. $userId = $matches[1];
    23. $user = getUserById($userId);
    24. if ($user) {
    25. sendResponse(200, $user);
    26. } else {
    27. sendResponse(404, 'User not found');
    28. }
    29. } else {
    30. sendResponse(404, 'Not Found');
    31. }
    32. }
    33. // 处理POST请求
    34. function handlePostRequest($requestUrl) {
    35. if ($requestUrl === '/users') {
    36. $username = $_POST['username'];
    37. // 处理创建用户逻辑
    38. sendResponse(201, 'User created successfully');
    39. } else {
    40. sendResponse(404, 'Not Found');
    41. }
    42. }
    43. // 处理PUT请求
    44. function handlePutRequest($requestUrl) {
    45. if (preg_match('/\/users\/(\d+)/', $requestUrl, $matches)) {
    46. $userId = $matches[1];
    47. $user = getUserById($userId);
    48. if ($user) {
    49. // 处理更新用户逻辑
    50. sendResponse(200, 'User updated successfully');
    51. } else {
    52. sendResponse(404, 'User not found');
    53. }
    54. } else {
    55. sendResponse(404, 'Not Found');
    56. }
    57. }
    58. // 处理DELETE请求
    59. function handleDeleteRequest($requestUrl) {
    60. if (preg_match('/\/users\/(\d+)/', $requestUrl, $matches)) {
    61. $userId = $matches[1];
    62. $user = getUserById($userId);
    63. if ($user) {
    64. // 处理删除用户逻辑
    65. sendResponse(200, 'User deleted successfully');
    66. } else {
    67. sendResponse(404, 'User not found');
    68. }
    69. } else {
    70. sendResponse(404, 'Not Found');
    71. }
    72. }
    73. // 根据ID获取用户信息
    74. function getUserById($userId) {
    75. // 获取用户的逻辑
    76. $users = [
    77. 1 => 'user1',
    78. 2 => 'user2',
    79. 3 => 'user3'
    80. ];
    81. return isset($users[$userId]) ? $users[$userId] : null;
    82. }
    83. // 发送响应
    84. function sendResponse($statusCode, $data) {
    85. header('Content-Type: application/json');
    86. http_response_code($statusCode);
    87. echo json_encode($data);
    88. }

  • 相关阅读:
    uniapp 地图如何添加?你要的教程来喽!
    《SpringBoot+Vue》Chapter04 SpringBoot整合Web开发
    liux常用命令(查看及其开放防火墙端口号+查看及其杀死进程)
    1.关于433MHz按键单片机解码
    利用uni-app 开发的iOS app 发布到App Store全流程
    手撕code(1~5)
    打造西南交通感知新范式,闪马智能携手首讯科技落地创新中心
    如何用webgl(three.js)搭建一个3D库房,3D仓库3D码头,3D集装箱,车辆定位,叉车定位可视化孪生系统——第十五课
    ACM算法笔记(六)排序算法【上】
    `Algorithm-Solution` `AcWing` 920. 最优乘车
  • 原文地址:https://blog.csdn.net/weixin_39934453/article/details/134473251