[{"data":1,"prerenderedAt":3168},["ShallowReactive",2],{"post-2023-12-12-php-simple-rest-api-zh":3,"surround-2023-12-12-php-simple-rest-api-zh":3155,"randomIndex/2023/12/12/php-simple-rest-api/":188,"language-switch-/2023/12/12/php-simple-rest-api/-en":3167},{"title":4,"date":5,"path":6,"tags":7,"body":10,"description":114},"【翻译】使用 PHP 构建简单的 REST API","2023-12-12 13:07:32","/2023/12/12/php-simple-rest-api",[8,9],"Translation","PHP",{"type":11,"value":12,"toc":3133},"minimark",[13,26,30,39,48,51,54,67,70,73,76,84,87,91,94,97,101,104,115,118,124,127,130,138,141,144,147,150,153,192,195,198,204,207,215,219,222,225,228,327,330,333,340,343,346,349,367,370,407,410,413,431,434,836,839,846,849,852,855,895,902,905,908,926,929,950,953,956,959,1027,1033,1036,1229,1236,1242,1247,1250,1452,1459,1464,1467,1746,1751,1754,1954,1959,1962,1965,1968,3010,3013,3016,3085,3088,3097,3100,3103,3106,3109,3112,3129],[14,15,16],"blockquote",{},[17,18,19,20],"p",{},"我这学期有一门偏向前端的 WEB 课程，期末大作业要求使用 PHP 作为后端语言实现一个简单的影评系统，应该是不允许使用框架，使用中文关键字在搜索引擎上搜了一阵子似乎没有可供参考的案例，后来就找到了这篇博客，当中的许多观点与我不谋而合，因此我将这篇博客翻译成中文，原文戳这里: ",[21,22,23],"a",{"href":23,"rel":24},"https://amirkamizi.com/blog/php-simple-rest-api",[25],"nofollow",[27,28,29],"h2",{"id":29},"介绍",[17,31,32,33,38],{},"上周 @rapid_api 发了一个非常好的关于",[21,34,37],{"href":35,"rel":36},"https://twitter.com/Rapid_API/status/1486423046424563714",[25],"使用 nodejs 和 express 创建 REST API"," 的教程帖子。我想要帮助你使用 PHP 开发同样简单的 REST API。",[17,40,41,42,47],{},"首先，如果你不了解 REST API，请务必查看这个 ",[21,43,46],{"href":44,"rel":45},"https://twitter.com/Rapid_API/status/1452932706967461890",[25],"Twitter 帖子","。",[27,49,50],{"id":50},"目标",[17,52,53],{},"在我们开始之前，我想提一句，当我写这篇帖子的时候，我想确保：",[55,56,57,61,64],"ol",{},[58,59,60],"li",{},"我使用单纯的 PHP，不使用框架",[58,62,63],{},"我使用最简单的函数和结构体以便所有人都可以理解并跟上",[58,65,66],{},"我将主体部分分开",[17,68,69],{},"现在让我们开始吧",[27,71,72],{"id":72},"准备",[17,74,75],{},"在我本地的机器上，我创建了一个叫 api 的文件夹于 xampp > htdocs，在里面有一个叫 index.php 的文件",[17,77,78,79],{},"如果你没有 xampp 或者你不知道如何把 php 跑起来，请务必查看",[21,80,83],{"href":81,"rel":82},"https://amirkamizi.com/blog/introduction-to-php",[25],"这篇文章",[17,85,86],{},"现在，如果你尝试访问 localhost/api，你将得到一个空的响应，因为 index.php 文件是空的",[27,88,90],{"id":89},"优雅的-url","优雅的 URL",[17,92,93],{},"项目中，我们需要处理的第一件事是 url",[17,95,96],{},"REST API 的关键特性之一是每一个 url 负责一个资源和一个操作",[98,99,100],"h3",{"id":100},"问题",[17,102,103],{},"这时候如果我创建一个 users.php，我需要访问",[105,106,111],"pre",{"className":107,"code":109,"language":110},[108],"language-text","localhost/api/users.php\n","text",[112,113,109],"code",{"__ignoreMap":114},"",[17,116,117],{},"我需要为每一个 user id 创建一个新的文件",[105,119,122],{"className":120,"code":121,"language":110},[108],"localhost/api/users/1.php\nlocalhost/api/users/2.php\n",[112,123,121],{"__ignoreMap":114},[17,125,126],{},"以此类推。",[17,128,129],{},"这种方案有两个问题",[55,131,132,135],{},[58,133,134],{},"为每个用户创建一个新文件是非常无聊和耗时的",[58,136,137],{},"路由不优雅，每个路径后面都带有 .php",[98,139,140],{"id":140},"解决方案",[17,142,143],{},"让我们解决这个问题。",[17,145,146],{},"正如我所提到的，我不想使用任何框架，并且我想使用最简单的、最让人能够理解的方案",[17,148,149],{},"让我们看看如何解决这个问题",[17,151,152],{},"在 api 文件夹下创建一个叫 .htaccess 的文件，并且将下面的文本复制进去",[105,154,158],{"className":155,"code":156,"language":157,"meta":114,"style":114},"language-htaccess shiki shiki-themes one-light one-dark-pro","RewriteEngine On\nRewriteBase /api\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteRule ^(.+)$ index.php [QSA,L]\n","htaccess",[112,159,160,168,174,180,186],{"__ignoreMap":114},[161,162,165],"span",{"class":163,"line":164},"line",1,[161,166,167],{},"RewriteEngine On\n",[161,169,171],{"class":163,"line":170},2,[161,172,173],{},"RewriteBase /api\n",[161,175,177],{"class":163,"line":176},3,[161,178,179],{},"RewriteCond %{REQUEST_FILENAME} !-d\n",[161,181,183],{"class":163,"line":182},4,[161,184,185],{},"RewriteCond %{REQUEST_FILENAME} !-f\n",[161,187,189],{"class":163,"line":188},5,[161,190,191],{},"RewriteRule ^(.+)$ index.php [QSA,L]\n",[17,193,194],{},"我们告诉服务器，将所有指向 /api 的请求都转发到 index.php 文件",[17,196,197],{},"现在，所有的 url 都指向 index.php 了，比如下面的 url 都是指向 index.php 的",[105,199,202],{"className":200,"code":201,"language":110},[108],"api/users\napi/users/10\napi/users/5\n",[112,203,201],{"__ignoreMap":114},[17,205,206],{},"现在我们同时解决了这两个问题",[55,208,209,212],{},[58,210,211],{},"所有的 url 都被一个文件处理",[58,213,214],{},"url 都很优雅，结尾处没有 .php",[27,216,218],{"id":217},"uri","URI",[17,220,221],{},"但如何知道用户请求的是哪个 uri 呢？",[17,223,224],{},"很简单，使用 $_SERVER 超全局变量",[17,226,227],{},"让我们来看一些例子",[105,229,233],{"className":230,"code":231,"language":232,"meta":114,"style":114},"language-php shiki shiki-themes one-light one-dark-pro","// url api/users\necho $_SERVER['REQUEST_URI'];\n// /api/users\n\n// url api/users/5\necho $_SERVER['REQUEST_URI'];\n// /api/users/5\n\n// url api\necho $_SERVER['REQUEST_URI'];\n// /api\n","php",[112,234,235,241,262,267,273,278,291,297,302,308,321],{"__ignoreMap":114},[161,236,237],{"class":163,"line":164},[161,238,240],{"class":239},"sW2Sy","// url api/users\n",[161,242,243,247,251,255,259],{"class":163,"line":170},[161,244,246],{"class":245},"s_Sar","echo",[161,248,250],{"class":249},"sJa8x"," $_SERVER",[161,252,254],{"class":253},"s5ixo","[",[161,256,258],{"class":257},"sDhpE","'REQUEST_URI'",[161,260,261],{"class":253},"];\n",[161,263,264],{"class":163,"line":176},[161,265,266],{"class":239},"// /api/users\n",[161,268,269],{"class":163,"line":182},[161,270,272],{"emptyLinePlaceholder":271},true,"\n",[161,274,275],{"class":163,"line":188},[161,276,277],{"class":239},"// url api/users/5\n",[161,279,281,283,285,287,289],{"class":163,"line":280},6,[161,282,246],{"class":245},[161,284,250],{"class":249},[161,286,254],{"class":253},[161,288,258],{"class":257},[161,290,261],{"class":253},[161,292,294],{"class":163,"line":293},7,[161,295,296],{"class":239},"// /api/users/5\n",[161,298,300],{"class":163,"line":299},8,[161,301,272],{"emptyLinePlaceholder":271},[161,303,305],{"class":163,"line":304},9,[161,306,307],{"class":239},"// url api\n",[161,309,311,313,315,317,319],{"class":163,"line":310},10,[161,312,246],{"class":245},[161,314,250],{"class":249},[161,316,254],{"class":253},[161,318,258],{"class":257},[161,320,261],{"class":253},[161,322,324],{"class":163,"line":323},11,[161,325,326],{"class":239},"// /api\n",[17,328,329],{},"看见了吗？这就是我们所需要的",[17,331,332],{},"现在，使用一个简单的 if 或者 switch 语句，我们就可以处理不同的路径了",[17,334,335,336,47],{},"如果你从来没有用过这些语句，去读",[21,337,83],{"href":338,"rel":339},"https://amirkamizi.com/blog/php-conditionals",[25],[27,341,342],{"id":342},"请求方法",[17,344,345],{},"接下来，我们需要从请求中获取请求的方法，以查看它是GET、POST、PUT、PATCH还是DELETE。",[17,347,348],{},"你可以从 $_SERVER 超全局数组中获取这个信息。",[105,350,352],{"className":230,"code":351,"language":232,"meta":114,"style":114},"$_SERVER['REQUEST_METHOD']\n",[112,353,354],{"__ignoreMap":114},[161,355,356,359,361,364],{"class":163,"line":164},[161,357,358],{"class":249},"$_SERVER",[161,360,254],{"class":253},[161,362,363],{"class":257},"'REQUEST_METHOD'",[161,365,366],{"class":253},"]\n",[17,368,369],{},"让我们将这两个值存储在变量中：",[105,371,373],{"className":230,"code":372,"language":232,"meta":114,"style":114},"$uri = $_SERVER['REQUEST_URI'];\n$method = $_SERVER['REQUEST_METHOD'];\n",[112,374,375,392],{"__ignoreMap":114},[161,376,377,380,384,386,388,390],{"class":163,"line":164},[161,378,379],{"class":249},"$uri",[161,381,383],{"class":382},"sknuh"," =",[161,385,250],{"class":249},[161,387,254],{"class":253},[161,389,258],{"class":257},[161,391,261],{"class":253},[161,393,394,397,399,401,403,405],{"class":163,"line":170},[161,395,396],{"class":249},"$method",[161,398,383],{"class":382},[161,400,250],{"class":249},[161,402,254],{"class":253},[161,404,363],{"class":257},[161,406,261],{"class":253},[17,408,409],{},"我们可以在一个简单的 switch 语句中使用这两个变量来处理不同的请求。",[17,411,412],{},"我们需要判断以下请求",[414,415,416,419,422,425,428],"ul",{},[58,417,418],{},"api/users 的 GET 请求",[58,420,421],{},"api/users/{id} 的 GET 请求",[58,423,424],{},"api/users 的 POST 请求",[58,426,427],{},"api/users/{id} 的 PUT 请求",[58,429,430],{},"api/users/{id} 的 DELETE 请求",[17,432,433],{},"让我们编写针对上述请求的 switch 语句",[105,435,437],{"className":230,"code":436,"language":232,"meta":114,"style":114},"switch ($method | $uri) {\n   /*\n   * Path: GET /api/users\n   * Task: show all the users\n   */\n   case ($method == 'GET' && $uri == '/api/users'):\n       break;\n   /*\n   * Path: GET /api/users/{id}\n   * Task: get one user\n   */\n   case ($method == 'GET' && preg_match('/\\/api\\/users\\/[1-9]/', $uri)):\n       break;\n   /*\n   * Path: POST /api/users\n   * Task: store one user\n   */\n   case ($method == 'POST' && $uri == '/api/users'):\n       break;\n   /*\n   * Path: PUT /api/users/{id}\n   * Task: update one user\n   */\n   case ($method == 'PUT' && preg_match('/\\/api\\/users\\/[1-9]/', $uri)):\n       break;\n   /*\n   * Path: DELETE /api/users/{id}\n   * Task: delete one user\n   */\n   case ($method == 'DELETE' && preg_match('/\\/api\\/users\\/[1-9]/', $uri)):\n       break;\n   /*\n   * Path: ?\n   * Task: this path doesn't match any of the defined paths\n   *      throw an error\n   */\n   default:\n       break;\n}\n",[112,438,439,459,464,469,474,479,507,515,519,524,529,533,582,589,594,600,606,611,635,642,647,653,659,664,704,711,716,722,728,733,779,786,791,797,803,809,814,823,830],{"__ignoreMap":114},[161,440,441,445,448,450,453,456],{"class":163,"line":164},[161,442,444],{"class":443},"sLKXg","switch",[161,446,447],{"class":253}," (",[161,449,396],{"class":249},[161,451,452],{"class":382}," |",[161,454,455],{"class":249}," $uri",[161,457,458],{"class":253},") {\n",[161,460,461],{"class":163,"line":170},[161,462,463],{"class":239},"   /*\n",[161,465,466],{"class":163,"line":176},[161,467,468],{"class":239},"   * Path: GET /api/users\n",[161,470,471],{"class":163,"line":182},[161,472,473],{"class":239},"   * Task: show all the users\n",[161,475,476],{"class":163,"line":188},[161,477,478],{"class":239},"   */\n",[161,480,481,484,486,488,491,494,497,499,501,504],{"class":163,"line":280},[161,482,483],{"class":443},"   case",[161,485,447],{"class":253},[161,487,396],{"class":249},[161,489,490],{"class":382}," ==",[161,492,493],{"class":257}," 'GET'",[161,495,496],{"class":382}," &&",[161,498,455],{"class":249},[161,500,490],{"class":382},[161,502,503],{"class":257}," '/api/users'",[161,505,506],{"class":253},"):\n",[161,508,509,512],{"class":163,"line":293},[161,510,511],{"class":443},"       break",[161,513,514],{"class":253},";\n",[161,516,517],{"class":163,"line":299},[161,518,463],{"class":239},[161,520,521],{"class":163,"line":304},[161,522,523],{"class":239},"   * Path: GET /api/users/{id}\n",[161,525,526],{"class":163,"line":310},[161,527,528],{"class":239},"   * Task: get one user\n",[161,530,531],{"class":163,"line":323},[161,532,478],{"class":239},[161,534,536,538,540,542,544,546,548,551,554,558,561,564,566,569,571,574,577,579],{"class":163,"line":535},12,[161,537,483],{"class":443},[161,539,447],{"class":253},[161,541,396],{"class":249},[161,543,490],{"class":382},[161,545,493],{"class":257},[161,547,496],{"class":382},[161,549,550],{"class":245}," preg_match",[161,552,553],{"class":253},"(",[161,555,557],{"class":556},"sDaw7","'/",[161,559,560],{"class":245},"\\/",[161,562,563],{"class":556},"api",[161,565,560],{"class":245},[161,567,568],{"class":556},"users",[161,570,560],{"class":245},[161,572,573],{"class":556},"[1-9]/'",[161,575,576],{"class":253},",",[161,578,455],{"class":249},[161,580,581],{"class":253},")):\n",[161,583,585,587],{"class":163,"line":584},13,[161,586,511],{"class":443},[161,588,514],{"class":253},[161,590,592],{"class":163,"line":591},14,[161,593,463],{"class":239},[161,595,597],{"class":163,"line":596},15,[161,598,599],{"class":239},"   * Path: POST /api/users\n",[161,601,603],{"class":163,"line":602},16,[161,604,605],{"class":239},"   * Task: store one user\n",[161,607,609],{"class":163,"line":608},17,[161,610,478],{"class":239},[161,612,614,616,618,620,622,625,627,629,631,633],{"class":163,"line":613},18,[161,615,483],{"class":443},[161,617,447],{"class":253},[161,619,396],{"class":249},[161,621,490],{"class":382},[161,623,624],{"class":257}," 'POST'",[161,626,496],{"class":382},[161,628,455],{"class":249},[161,630,490],{"class":382},[161,632,503],{"class":257},[161,634,506],{"class":253},[161,636,638,640],{"class":163,"line":637},19,[161,639,511],{"class":443},[161,641,514],{"class":253},[161,643,645],{"class":163,"line":644},20,[161,646,463],{"class":239},[161,648,650],{"class":163,"line":649},21,[161,651,652],{"class":239},"   * Path: PUT /api/users/{id}\n",[161,654,656],{"class":163,"line":655},22,[161,657,658],{"class":239},"   * Task: update one user\n",[161,660,662],{"class":163,"line":661},23,[161,663,478],{"class":239},[161,665,667,669,671,673,675,678,680,682,684,686,688,690,692,694,696,698,700,702],{"class":163,"line":666},24,[161,668,483],{"class":443},[161,670,447],{"class":253},[161,672,396],{"class":249},[161,674,490],{"class":382},[161,676,677],{"class":257}," 'PUT'",[161,679,496],{"class":382},[161,681,550],{"class":245},[161,683,553],{"class":253},[161,685,557],{"class":556},[161,687,560],{"class":245},[161,689,563],{"class":556},[161,691,560],{"class":245},[161,693,568],{"class":556},[161,695,560],{"class":245},[161,697,573],{"class":556},[161,699,576],{"class":253},[161,701,455],{"class":249},[161,703,581],{"class":253},[161,705,707,709],{"class":163,"line":706},25,[161,708,511],{"class":443},[161,710,514],{"class":253},[161,712,714],{"class":163,"line":713},26,[161,715,463],{"class":239},[161,717,719],{"class":163,"line":718},27,[161,720,721],{"class":239},"   * Path: DELETE /api/users/{id}\n",[161,723,725],{"class":163,"line":724},28,[161,726,727],{"class":239},"   * Task: delete one user\n",[161,729,731],{"class":163,"line":730},29,[161,732,478],{"class":239},[161,734,736,738,740,742,744,747,750,753,755,757,759,761,763,765,767,769,771,773,775,777],{"class":163,"line":735},30,[161,737,483],{"class":443},[161,739,447],{"class":253},[161,741,396],{"class":249},[161,743,490],{"class":382},[161,745,746],{"class":257}," '",[161,748,749],{"class":443},"DELETE",[161,751,752],{"class":257},"'",[161,754,496],{"class":382},[161,756,550],{"class":245},[161,758,553],{"class":253},[161,760,557],{"class":556},[161,762,560],{"class":245},[161,764,563],{"class":556},[161,766,560],{"class":245},[161,768,568],{"class":556},[161,770,560],{"class":245},[161,772,573],{"class":556},[161,774,576],{"class":253},[161,776,455],{"class":249},[161,778,581],{"class":253},[161,780,782,784],{"class":163,"line":781},31,[161,783,511],{"class":443},[161,785,514],{"class":253},[161,787,789],{"class":163,"line":788},32,[161,790,463],{"class":239},[161,792,794],{"class":163,"line":793},33,[161,795,796],{"class":239},"   * Path: ?\n",[161,798,800],{"class":163,"line":799},34,[161,801,802],{"class":239},"   * Task: this path doesn't match any of the defined paths\n",[161,804,806],{"class":163,"line":805},35,[161,807,808],{"class":239},"   *      throw an error\n",[161,810,812],{"class":163,"line":811},36,[161,813,478],{"class":239},[161,815,817,820],{"class":163,"line":816},37,[161,818,819],{"class":443},"   default",[161,821,822],{"class":253},":\n",[161,824,826,828],{"class":163,"line":825},38,[161,827,511],{"class":443},[161,829,514],{"class":253},[161,831,833],{"class":163,"line":832},39,[161,834,835],{"class":253},"}\n",[17,837,838],{},"当我们想要在 switch 语句中使用两个变量，我们可以使用 | 符号",[17,840,841,842,47],{},"如果你想知道 preg_match 是如何工作的，看",[21,843,83],{"href":844,"rel":845},"https://amirkamizi.com/blog/php-regular-expressions",[25],[27,847,848],{"id":848},"数据库",[17,850,851],{},"现在是说说数据。储存数据的最好方法是将数据储存在数据库中。但在这篇教程中，我不想使用数据库。因此，我们使用一个 json 文件当作数据库来保证数据的持久性。",[17,853,854],{},"我的 json 文件看起来长成这个样子：",[105,856,860],{"className":857,"code":858,"language":859,"meta":114,"style":114},"language-json shiki shiki-themes one-light one-dark-pro","{\n   \"1\": \"Pratham\",\n   \"2\": \"Amir\"\n}\n","json",[112,861,862,867,881,891],{"__ignoreMap":114},[161,863,864],{"class":163,"line":164},[161,865,866],{"class":253},"{\n",[161,868,869,872,875,878],{"class":163,"line":170},[161,870,871],{"class":249},"   \"1\"",[161,873,874],{"class":253},": ",[161,876,877],{"class":257},"\"Pratham\"",[161,879,880],{"class":253},",\n",[161,882,883,886,888],{"class":163,"line":176},[161,884,885],{"class":249},"   \"2\"",[161,887,874],{"class":253},[161,889,890],{"class":257},"\"Amir\"\n",[161,892,893],{"class":163,"line":182},[161,894,835],{"class":253},[17,896,897,898],{},"如果你想知道如何使用 json，看",[21,899,83],{"href":900,"rel":901},"https://amirkamizi.com/blog/php-xml-and-json",[25],[17,903,904],{},"我加载 json 数据并将其转换为数组，然后在 php 使用他们。如果我想要更改数据，我将数组转换回 json 并将其重新写入文件。",[17,906,907],{},"要将整个文件作为一个字符串读取并存储在变量中，我使用：",[105,909,911],{"className":230,"code":910,"language":232,"meta":114,"style":114},"file_get_contents($jsonFile);\n",[112,912,913],{"__ignoreMap":114},[161,914,915,918,920,923],{"class":163,"line":164},[161,916,917],{"class":245},"file_get_contents",[161,919,553],{"class":253},[161,921,922],{"class":249},"$jsonFile",[161,924,925],{"class":253},");\n",[17,927,928],{},"而要将json写入文件，我使用：",[105,930,932],{"className":230,"code":931,"language":232,"meta":114,"style":114},"file_put_contents($jsonFile, $data);\n",[112,933,934],{"__ignoreMap":114},[161,935,936,939,941,943,945,948],{"class":163,"line":164},[161,937,938],{"class":245},"file_put_contents",[161,940,553],{"class":253},[161,942,922],{"class":249},[161,944,576],{"class":253},[161,946,947],{"class":249}," $data",[161,949,925],{"class":253},[17,951,952],{},"好了，现在我们的数据库处理好了，让我们开始处理所有的路径。",[17,954,955],{},"我使用 Postman 发送请求并查看响应。",[27,957,958],{"id":958},"获取所有用户",[105,960,962],{"className":230,"code":961,"language":232,"meta":114,"style":114},"case ($method == 'GET' && $uri == '/api/users'):\n   header('Content-Type: application/json');\n   echo json_encode($users, JSON_PRETTY_PRINT);\n   break;\n",[112,963,964,987,999,1020],{"__ignoreMap":114},[161,965,966,969,971,973,975,977,979,981,983,985],{"class":163,"line":164},[161,967,968],{"class":443},"case",[161,970,447],{"class":253},[161,972,396],{"class":249},[161,974,490],{"class":382},[161,976,493],{"class":257},[161,978,496],{"class":382},[161,980,455],{"class":249},[161,982,490],{"class":382},[161,984,503],{"class":257},[161,986,506],{"class":253},[161,988,989,992,994,997],{"class":163,"line":170},[161,990,991],{"class":245},"   header",[161,993,553],{"class":253},[161,995,996],{"class":257},"'Content-Type: application/json'",[161,998,925],{"class":253},[161,1000,1001,1004,1007,1009,1012,1014,1018],{"class":163,"line":176},[161,1002,1003],{"class":245},"   echo",[161,1005,1006],{"class":245}," json_encode",[161,1008,553],{"class":253},[161,1010,1011],{"class":249},"$users",[161,1013,576],{"class":253},[161,1015,1017],{"class":1016},"sxymB"," JSON_PRETTY_PRINT",[161,1019,925],{"class":253},[161,1021,1022,1025],{"class":163,"line":182},[161,1023,1024],{"class":443},"   break",[161,1026,514],{"class":253},[17,1028,1029],{},[1030,1031],"img",{"alt":114,"src":1032},"https://static.031130.xyz/uploads/2024/08/12/6577fcdf64a96.webp",[27,1034,1035],{"id":1035},"获取单个用户",[105,1037,1039],{"className":230,"code":1038,"language":232,"meta":114,"style":114},"case ($method == 'GET' && preg_match('/\\/api\\/users\\/[1-9]/', $uri)):\n   header('Content-Type: application/json');\n   // get the id\n   $id = basename($uri);\n   if (!array_key_exists($id, $users)) {\n       http_response_code(404);\n       echo json_encode(['error' => 'user does not exist']);\n       break;\n   }\n   $responseData = [$id => $users[$id]];\n   echo json_encode($responseData, JSON_PRETTY_PRINT);\n   break;\n",[112,1040,1041,1079,1089,1094,1110,1136,1149,1171,1177,1182,1206,1223],{"__ignoreMap":114},[161,1042,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077],{"class":163,"line":164},[161,1044,968],{"class":443},[161,1046,447],{"class":253},[161,1048,396],{"class":249},[161,1050,490],{"class":382},[161,1052,493],{"class":257},[161,1054,496],{"class":382},[161,1056,550],{"class":245},[161,1058,553],{"class":253},[161,1060,557],{"class":556},[161,1062,560],{"class":245},[161,1064,563],{"class":556},[161,1066,560],{"class":245},[161,1068,568],{"class":556},[161,1070,560],{"class":245},[161,1072,573],{"class":556},[161,1074,576],{"class":253},[161,1076,455],{"class":249},[161,1078,581],{"class":253},[161,1080,1081,1083,1085,1087],{"class":163,"line":170},[161,1082,991],{"class":245},[161,1084,553],{"class":253},[161,1086,996],{"class":257},[161,1088,925],{"class":253},[161,1090,1091],{"class":163,"line":176},[161,1092,1093],{"class":239},"   // get the id\n",[161,1095,1096,1099,1101,1104,1106,1108],{"class":163,"line":182},[161,1097,1098],{"class":249},"   $id",[161,1100,383],{"class":382},[161,1102,1103],{"class":245}," basename",[161,1105,553],{"class":253},[161,1107,379],{"class":249},[161,1109,925],{"class":253},[161,1111,1112,1115,1117,1120,1123,1125,1128,1130,1133],{"class":163,"line":188},[161,1113,1114],{"class":443},"   if",[161,1116,447],{"class":253},[161,1118,1119],{"class":382},"!",[161,1121,1122],{"class":245},"array_key_exists",[161,1124,553],{"class":253},[161,1126,1127],{"class":249},"$id",[161,1129,576],{"class":253},[161,1131,1132],{"class":249}," $users",[161,1134,1135],{"class":253},")) {\n",[161,1137,1138,1141,1143,1147],{"class":163,"line":280},[161,1139,1140],{"class":245},"       http_response_code",[161,1142,553],{"class":253},[161,1144,1146],{"class":1145},"sAGMh","404",[161,1148,925],{"class":253},[161,1150,1151,1154,1156,1159,1162,1165,1168],{"class":163,"line":293},[161,1152,1153],{"class":245},"       echo",[161,1155,1006],{"class":245},[161,1157,1158],{"class":253},"([",[161,1160,1161],{"class":257},"'error'",[161,1163,1164],{"class":253}," =>",[161,1166,1167],{"class":257}," 'user does not exist'",[161,1169,1170],{"class":253},"]);\n",[161,1172,1173,1175],{"class":163,"line":299},[161,1174,511],{"class":443},[161,1176,514],{"class":253},[161,1178,1179],{"class":163,"line":304},[161,1180,1181],{"class":253},"   }\n",[161,1183,1184,1187,1189,1192,1194,1197,1199,1201,1203],{"class":163,"line":310},[161,1185,1186],{"class":249},"   $responseData",[161,1188,383],{"class":382},[161,1190,1191],{"class":253}," [",[161,1193,1127],{"class":249},[161,1195,1196],{"class":253}," => ",[161,1198,1011],{"class":249},[161,1200,254],{"class":253},[161,1202,1127],{"class":249},[161,1204,1205],{"class":253},"]];\n",[161,1207,1208,1210,1212,1214,1217,1219,1221],{"class":163,"line":323},[161,1209,1003],{"class":245},[161,1211,1006],{"class":245},[161,1213,553],{"class":253},[161,1215,1216],{"class":249},"$responseData",[161,1218,576],{"class":253},[161,1220,1017],{"class":1016},[161,1222,925],{"class":253},[161,1224,1225,1227],{"class":163,"line":535},[161,1226,1024],{"class":443},[161,1228,514],{"class":253},[17,1230,1231,1235],{},[1232,1233,1234],"strong",{},"basename","($uri) 会将 uri 的最后一部分给我。比如一个 api/users/10 这样的路径，它会返回 10.",[17,1237,1238,1239,1241],{},"然后我使用 ",[1232,1240,1122],{}," 检查是否存在一个 id 为 10 的用户",[17,1243,1244],{},[1030,1245],{"alt":114,"src":1246},"https://static.031130.xyz/uploads/2024/08/12/6577fd77c3d06.webp",[27,1248,1249],{"id":1249},"添加一个新用户",[105,1251,1253],{"className":230,"code":1252,"language":232,"meta":114,"style":114},"case ($method == 'POST' && $uri == '/api/users'):\n   header('Content-Type: application/json');\n   $requestBody = json_decode(file_get_contents('php://input'), true);\n   $name = $requestBody['name'];\n   if (empty($name)) {\n       http_response_code(404);\n       echo json_encode(['error' => 'Please add name of the user']);\n   }\n   $users[] = $name;\n   $data = json_encode($users, JSON_PRETTY_PRINT);\n   file_put_contents($jsonFile, $data);\n   echo json_encode(['message' => 'user added successfully']);\n   break;\n",[112,1254,1255,1277,1287,1314,1331,1347,1357,1374,1378,1394,1413,1428,1446],{"__ignoreMap":114},[161,1256,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275],{"class":163,"line":164},[161,1258,968],{"class":443},[161,1260,447],{"class":253},[161,1262,396],{"class":249},[161,1264,490],{"class":382},[161,1266,624],{"class":257},[161,1268,496],{"class":382},[161,1270,455],{"class":249},[161,1272,490],{"class":382},[161,1274,503],{"class":257},[161,1276,506],{"class":253},[161,1278,1279,1281,1283,1285],{"class":163,"line":170},[161,1280,991],{"class":245},[161,1282,553],{"class":253},[161,1284,996],{"class":257},[161,1286,925],{"class":253},[161,1288,1289,1292,1294,1297,1299,1301,1303,1306,1309,1312],{"class":163,"line":176},[161,1290,1291],{"class":249},"   $requestBody",[161,1293,383],{"class":382},[161,1295,1296],{"class":245}," json_decode",[161,1298,553],{"class":253},[161,1300,917],{"class":245},[161,1302,553],{"class":253},[161,1304,1305],{"class":257},"'php://input'",[161,1307,1308],{"class":253},"),",[161,1310,1311],{"class":1145}," true",[161,1313,925],{"class":253},[161,1315,1316,1319,1321,1324,1326,1329],{"class":163,"line":182},[161,1317,1318],{"class":249},"   $name",[161,1320,383],{"class":382},[161,1322,1323],{"class":249}," $requestBody",[161,1325,254],{"class":253},[161,1327,1328],{"class":257},"'name'",[161,1330,261],{"class":253},[161,1332,1333,1335,1337,1340,1342,1345],{"class":163,"line":188},[161,1334,1114],{"class":443},[161,1336,447],{"class":253},[161,1338,1339],{"class":245},"empty",[161,1341,553],{"class":253},[161,1343,1344],{"class":249},"$name",[161,1346,1135],{"class":253},[161,1348,1349,1351,1353,1355],{"class":163,"line":280},[161,1350,1140],{"class":245},[161,1352,553],{"class":253},[161,1354,1146],{"class":1145},[161,1356,925],{"class":253},[161,1358,1359,1361,1363,1365,1367,1369,1372],{"class":163,"line":293},[161,1360,1153],{"class":245},[161,1362,1006],{"class":245},[161,1364,1158],{"class":253},[161,1366,1161],{"class":257},[161,1368,1164],{"class":253},[161,1370,1371],{"class":257}," 'Please add name of the user'",[161,1373,1170],{"class":253},[161,1375,1376],{"class":163,"line":299},[161,1377,1181],{"class":253},[161,1379,1380,1383,1386,1389,1392],{"class":163,"line":304},[161,1381,1382],{"class":249},"   $users",[161,1384,1385],{"class":253},"[] ",[161,1387,1388],{"class":382},"=",[161,1390,1391],{"class":249}," $name",[161,1393,514],{"class":253},[161,1395,1396,1399,1401,1403,1405,1407,1409,1411],{"class":163,"line":310},[161,1397,1398],{"class":249},"   $data",[161,1400,383],{"class":382},[161,1402,1006],{"class":245},[161,1404,553],{"class":253},[161,1406,1011],{"class":249},[161,1408,576],{"class":253},[161,1410,1017],{"class":1016},[161,1412,925],{"class":253},[161,1414,1415,1418,1420,1422,1424,1426],{"class":163,"line":323},[161,1416,1417],{"class":245},"   file_put_contents",[161,1419,553],{"class":253},[161,1421,922],{"class":249},[161,1423,576],{"class":253},[161,1425,947],{"class":249},[161,1427,925],{"class":253},[161,1429,1430,1432,1434,1436,1439,1441,1444],{"class":163,"line":535},[161,1431,1003],{"class":245},[161,1433,1006],{"class":245},[161,1435,1158],{"class":253},[161,1437,1438],{"class":257},"'message'",[161,1440,1164],{"class":253},[161,1442,1443],{"class":257}," 'user added successfully'",[161,1445,1170],{"class":253},[161,1447,1448,1450],{"class":163,"line":584},[161,1449,1024],{"class":443},[161,1451,514],{"class":253},[17,1453,1454,1455,1458],{},"我使用 ",[1232,1456,1457],{},"file_get_contents('php://input')"," 以获取请求的 body 部分。由于在这个例子中我使用的是 json，我将会解码 json 以便我可以获取到名字。",[17,1460,1461],{},[1030,1462],{"alt":114,"src":1463},"https://static.031130.xyz/uploads/2024/08/12/6577fdca88f76.webp",[27,1465,1466],{"id":1466},"更新一个用户",[105,1468,1470],{"className":230,"code":1469,"language":232,"meta":114,"style":114},"case ($method == 'PUT' && preg_match('/\\/api\\/users\\/[1-9]/', $uri)):\n   header('Content-Type: application/json');\n   // get the id\n   $id = basename($uri);\n   if (!array_key_exists($id, $users)) {\n       http_response_code(404);\n       echo json_encode(['error' => 'user does not exist']);\n       break;\n   }\n   $requestBody = json_decode(file_get_contents('php://input'), true);\n   $name = $requestBody['name'];\n   if (empty($name)) {\n       http_response_code(404);\n       echo json_encode(['error' => 'Please add name of the user']);\n   }\n   $users[$id] = $name;\n   $data = json_encode($users, JSON_PRETTY_PRINT);\n   file_put_contents($jsonFile, $data);\n   echo json_encode(['message' => 'user updated successfully']);\n   break;\n",[112,1471,1472,1510,1520,1524,1538,1558,1568,1584,1590,1594,1616,1630,1644,1654,1670,1674,1691,1709,1723,1740],{"__ignoreMap":114},[161,1473,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508],{"class":163,"line":164},[161,1475,968],{"class":443},[161,1477,447],{"class":253},[161,1479,396],{"class":249},[161,1481,490],{"class":382},[161,1483,677],{"class":257},[161,1485,496],{"class":382},[161,1487,550],{"class":245},[161,1489,553],{"class":253},[161,1491,557],{"class":556},[161,1493,560],{"class":245},[161,1495,563],{"class":556},[161,1497,560],{"class":245},[161,1499,568],{"class":556},[161,1501,560],{"class":245},[161,1503,573],{"class":556},[161,1505,576],{"class":253},[161,1507,455],{"class":249},[161,1509,581],{"class":253},[161,1511,1512,1514,1516,1518],{"class":163,"line":170},[161,1513,991],{"class":245},[161,1515,553],{"class":253},[161,1517,996],{"class":257},[161,1519,925],{"class":253},[161,1521,1522],{"class":163,"line":176},[161,1523,1093],{"class":239},[161,1525,1526,1528,1530,1532,1534,1536],{"class":163,"line":182},[161,1527,1098],{"class":249},[161,1529,383],{"class":382},[161,1531,1103],{"class":245},[161,1533,553],{"class":253},[161,1535,379],{"class":249},[161,1537,925],{"class":253},[161,1539,1540,1542,1544,1546,1548,1550,1552,1554,1556],{"class":163,"line":188},[161,1541,1114],{"class":443},[161,1543,447],{"class":253},[161,1545,1119],{"class":382},[161,1547,1122],{"class":245},[161,1549,553],{"class":253},[161,1551,1127],{"class":249},[161,1553,576],{"class":253},[161,1555,1132],{"class":249},[161,1557,1135],{"class":253},[161,1559,1560,1562,1564,1566],{"class":163,"line":280},[161,1561,1140],{"class":245},[161,1563,553],{"class":253},[161,1565,1146],{"class":1145},[161,1567,925],{"class":253},[161,1569,1570,1572,1574,1576,1578,1580,1582],{"class":163,"line":293},[161,1571,1153],{"class":245},[161,1573,1006],{"class":245},[161,1575,1158],{"class":253},[161,1577,1161],{"class":257},[161,1579,1164],{"class":253},[161,1581,1167],{"class":257},[161,1583,1170],{"class":253},[161,1585,1586,1588],{"class":163,"line":299},[161,1587,511],{"class":443},[161,1589,514],{"class":253},[161,1591,1592],{"class":163,"line":304},[161,1593,1181],{"class":253},[161,1595,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614],{"class":163,"line":310},[161,1597,1291],{"class":249},[161,1599,383],{"class":382},[161,1601,1296],{"class":245},[161,1603,553],{"class":253},[161,1605,917],{"class":245},[161,1607,553],{"class":253},[161,1609,1305],{"class":257},[161,1611,1308],{"class":253},[161,1613,1311],{"class":1145},[161,1615,925],{"class":253},[161,1617,1618,1620,1622,1624,1626,1628],{"class":163,"line":323},[161,1619,1318],{"class":249},[161,1621,383],{"class":382},[161,1623,1323],{"class":249},[161,1625,254],{"class":253},[161,1627,1328],{"class":257},[161,1629,261],{"class":253},[161,1631,1632,1634,1636,1638,1640,1642],{"class":163,"line":535},[161,1633,1114],{"class":443},[161,1635,447],{"class":253},[161,1637,1339],{"class":245},[161,1639,553],{"class":253},[161,1641,1344],{"class":249},[161,1643,1135],{"class":253},[161,1645,1646,1648,1650,1652],{"class":163,"line":584},[161,1647,1140],{"class":245},[161,1649,553],{"class":253},[161,1651,1146],{"class":1145},[161,1653,925],{"class":253},[161,1655,1656,1658,1660,1662,1664,1666,1668],{"class":163,"line":591},[161,1657,1153],{"class":245},[161,1659,1006],{"class":245},[161,1661,1158],{"class":253},[161,1663,1161],{"class":257},[161,1665,1164],{"class":253},[161,1667,1371],{"class":257},[161,1669,1170],{"class":253},[161,1671,1672],{"class":163,"line":596},[161,1673,1181],{"class":253},[161,1675,1676,1678,1680,1682,1685,1687,1689],{"class":163,"line":602},[161,1677,1382],{"class":249},[161,1679,254],{"class":253},[161,1681,1127],{"class":249},[161,1683,1684],{"class":253},"] ",[161,1686,1388],{"class":382},[161,1688,1391],{"class":249},[161,1690,514],{"class":253},[161,1692,1693,1695,1697,1699,1701,1703,1705,1707],{"class":163,"line":608},[161,1694,1398],{"class":249},[161,1696,383],{"class":382},[161,1698,1006],{"class":245},[161,1700,553],{"class":253},[161,1702,1011],{"class":249},[161,1704,576],{"class":253},[161,1706,1017],{"class":1016},[161,1708,925],{"class":253},[161,1710,1711,1713,1715,1717,1719,1721],{"class":163,"line":613},[161,1712,1417],{"class":245},[161,1714,553],{"class":253},[161,1716,922],{"class":249},[161,1718,576],{"class":253},[161,1720,947],{"class":249},[161,1722,925],{"class":253},[161,1724,1725,1727,1729,1731,1733,1735,1738],{"class":163,"line":637},[161,1726,1003],{"class":245},[161,1728,1006],{"class":245},[161,1730,1158],{"class":253},[161,1732,1438],{"class":257},[161,1734,1164],{"class":253},[161,1736,1737],{"class":257}," 'user updated successfully'",[161,1739,1170],{"class":253},[161,1741,1742,1744],{"class":163,"line":644},[161,1743,1024],{"class":443},[161,1745,514],{"class":253},[17,1747,1748],{},[1030,1749],{"alt":114,"src":1750},"https://static.031130.xyz/uploads/2024/08/12/6577fdf646402.webp",[27,1752,1753],{"id":1753},"删除一个用户",[105,1755,1757],{"className":230,"code":1756,"language":232,"meta":114,"style":114},"case ($method == 'DELETE' && preg_match('/\\/api\\/users\\/[1-9]/', $uri)):\n   header('Content-Type: application/json');\n   // get the id\n   $id = basename($uri);\n   if (empty($users[$id])) {\n       http_response_code(404);\n       echo json_encode(['error' => 'user does not exist']);\n       break;\n   }\n   unset($users[$id]);\n   $data = json_encode($users, JSON_PRETTY_PRINT);\n   file_put_contents($jsonFile, $data);\n   echo json_encode(['message' => 'user deleted successfully']);\n   break;\n",[112,1758,1759,1801,1811,1815,1829,1848,1858,1874,1880,1884,1899,1917,1931,1948],{"__ignoreMap":114},[161,1760,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799],{"class":163,"line":164},[161,1762,968],{"class":443},[161,1764,447],{"class":253},[161,1766,396],{"class":249},[161,1768,490],{"class":382},[161,1770,746],{"class":257},[161,1772,749],{"class":443},[161,1774,752],{"class":257},[161,1776,496],{"class":382},[161,1778,550],{"class":245},[161,1780,553],{"class":253},[161,1782,557],{"class":556},[161,1784,560],{"class":245},[161,1786,563],{"class":556},[161,1788,560],{"class":245},[161,1790,568],{"class":556},[161,1792,560],{"class":245},[161,1794,573],{"class":556},[161,1796,576],{"class":253},[161,1798,455],{"class":249},[161,1800,581],{"class":253},[161,1802,1803,1805,1807,1809],{"class":163,"line":170},[161,1804,991],{"class":245},[161,1806,553],{"class":253},[161,1808,996],{"class":257},[161,1810,925],{"class":253},[161,1812,1813],{"class":163,"line":176},[161,1814,1093],{"class":239},[161,1816,1817,1819,1821,1823,1825,1827],{"class":163,"line":182},[161,1818,1098],{"class":249},[161,1820,383],{"class":382},[161,1822,1103],{"class":245},[161,1824,553],{"class":253},[161,1826,379],{"class":249},[161,1828,925],{"class":253},[161,1830,1831,1833,1835,1837,1839,1841,1843,1845],{"class":163,"line":188},[161,1832,1114],{"class":443},[161,1834,447],{"class":253},[161,1836,1339],{"class":245},[161,1838,553],{"class":253},[161,1840,1011],{"class":249},[161,1842,254],{"class":253},[161,1844,1127],{"class":249},[161,1846,1847],{"class":253},"])) {\n",[161,1849,1850,1852,1854,1856],{"class":163,"line":280},[161,1851,1140],{"class":245},[161,1853,553],{"class":253},[161,1855,1146],{"class":1145},[161,1857,925],{"class":253},[161,1859,1860,1862,1864,1866,1868,1870,1872],{"class":163,"line":293},[161,1861,1153],{"class":245},[161,1863,1006],{"class":245},[161,1865,1158],{"class":253},[161,1867,1161],{"class":257},[161,1869,1164],{"class":253},[161,1871,1167],{"class":257},[161,1873,1170],{"class":253},[161,1875,1876,1878],{"class":163,"line":299},[161,1877,511],{"class":443},[161,1879,514],{"class":253},[161,1881,1882],{"class":163,"line":304},[161,1883,1181],{"class":253},[161,1885,1886,1889,1891,1893,1895,1897],{"class":163,"line":310},[161,1887,1888],{"class":245},"   unset",[161,1890,553],{"class":253},[161,1892,1011],{"class":249},[161,1894,254],{"class":253},[161,1896,1127],{"class":249},[161,1898,1170],{"class":253},[161,1900,1901,1903,1905,1907,1909,1911,1913,1915],{"class":163,"line":323},[161,1902,1398],{"class":249},[161,1904,383],{"class":382},[161,1906,1006],{"class":245},[161,1908,553],{"class":253},[161,1910,1011],{"class":249},[161,1912,576],{"class":253},[161,1914,1017],{"class":1016},[161,1916,925],{"class":253},[161,1918,1919,1921,1923,1925,1927,1929],{"class":163,"line":535},[161,1920,1417],{"class":245},[161,1922,553],{"class":253},[161,1924,922],{"class":249},[161,1926,576],{"class":253},[161,1928,947],{"class":249},[161,1930,925],{"class":253},[161,1932,1933,1935,1937,1939,1941,1943,1946],{"class":163,"line":584},[161,1934,1003],{"class":245},[161,1936,1006],{"class":245},[161,1938,1158],{"class":253},[161,1940,1438],{"class":257},[161,1942,1164],{"class":253},[161,1944,1945],{"class":257}," 'user deleted successfully'",[161,1947,1170],{"class":253},[161,1949,1950,1952],{"class":163,"line":591},[161,1951,1024],{"class":443},[161,1953,514],{"class":253},[17,1955,1956],{},[1030,1957],{"alt":114,"src":1958},"https://static.031130.xyz/uploads/2024/08/12/6577fe0c3a95b.webp",[27,1960,1961],{"id":1961},"最终文件",[17,1963,1964],{},"现在我们的 index.php 文件看起来是这样的",[17,1966,1967],{},"在 70 行左右的代码中，我们使用 PHP 创建了一个 RESTful API，很神奇吧？",[105,1969,1971],{"className":230,"code":1970,"language":232,"meta":114,"style":114},"\u003C?php\n$jsonFile = 'users.json';\n$data = file_get_contents($jsonFile);\n$users = json_decode($data, true);\n$uri = $_SERVER['REQUEST_URI'];\n$method = $_SERVER['REQUEST_METHOD'];\nswitch ($method | $uri) {\n   case ($method == 'GET' && $uri == '/api/users'):\n       header('Content-Type: application/json');\n       echo json_encode($users, JSON_PRETTY_PRINT);\n       break;\n   case ($method == 'GET' && preg_match('/\\/api\\/users\\/[1-9]/', $uri)):\n       header('Content-Type: application/json');\n       $id = basename($uri);\n       if (!array_key_exists($id, $users)) {\n           http_response_code(404);\n           echo json_encode(['error' => 'user does not exist']);\n           break;\n       }\n       $responseData = [$id => $users[$id]];\n       echo json_encode($responseData, JSON_PRETTY_PRINT);\n       break;\n   case ($method == 'POST' && $uri == '/api/users'):\n       header('Content-Type: application/json');\n       $requestBody = json_decode(file_get_contents('php://input'), true);\n       $name = $requestBody['name'];\n       if (empty($name)) {\n           http_response_code(404);\n           echo json_encode(['error' => 'Please add name of the user']);\n       }\n       $users[] = $name;\n       $data = json_encode($users, JSON_PRETTY_PRINT);\n       file_put_contents($jsonFile, $data);\n       echo json_encode(['message' => 'user added successfully']);\n       break;\n   case ($method == 'PUT' && preg_match('/\\/api\\/users\\/[1-9]/', $uri)):\n       header('Content-Type: application/json');\n       $id = basename($uri);\n       if (!array_key_exists($id, $users)) {\n           http_response_code(404);\n           echo json_encode(['error' => 'user does not exist']);\n           break;\n       }\n       $requestBody = json_decode(file_get_contents('php://input'), true);\n       $name = $requestBody['name'];\n       if (empty($name)) {\n           http_response_code(404);\n           echo json_encode(['error' => 'Please add name of the user']);\n       }\n       $users[$id] = $name;\n       $data = json_encode($users, JSON_PRETTY_PRINT);\n       file_put_contents($jsonFile, $data);\n       echo json_encode(['message' => 'user updated successfully']);\n       break;\n   case ($method == 'DELETE' && preg_match('/\\/api\\/users\\/[1-9]/', $uri)):\n       header('Content-Type: application/json');\n       $id = basename($uri);\n       if (empty($users[$id])) {\n           http_response_code(404);\n           echo json_encode(['error' => 'user does not exist']);\n           break;\n       }\n       unset($users[$id]);\n       $data = json_encode($users, JSON_PRETTY_PRINT);\n       file_put_contents($jsonFile, $data);\n       echo json_encode(['message' => 'user deleted successfully']);\n       break;\n   default:\n       http_response_code(404);\n       echo json_encode(['error' => \"We cannot find what you're looking for.\"]);\n       break;\n}\n",[112,1972,1973,1985,1996,2012,2030,2044,2058,2072,2094,2105,2121,2127,2165,2175,2190,2211,2222,2239,2246,2251,2272,2288,2294,2316,2326,2349,2364,2378,2388,2404,2408,2421,2440,2455,2471,2477,2515,2525,2539,2559,2570,2587,2594,2599,2622,2637,2652,2663,2680,2685,2702,2721,2736,2753,2760,2803,2814,2829,2848,2859,2876,2883,2888,2904,2923,2938,2955,2962,2969,2980,2998,3005],{"__ignoreMap":114},[161,1974,1975,1978,1982],{"class":163,"line":164},[161,1976,1977],{"class":382},"\u003C",[161,1979,1981],{"class":1980},"sblXP","?",[161,1983,1984],{"class":1016},"php\n",[161,1986,1987,1989,1991,1994],{"class":163,"line":170},[161,1988,922],{"class":249},[161,1990,383],{"class":382},[161,1992,1993],{"class":257}," 'users.json'",[161,1995,514],{"class":253},[161,1997,1998,2001,2003,2006,2008,2010],{"class":163,"line":176},[161,1999,2000],{"class":249},"$data",[161,2002,383],{"class":382},[161,2004,2005],{"class":245}," file_get_contents",[161,2007,553],{"class":253},[161,2009,922],{"class":249},[161,2011,925],{"class":253},[161,2013,2014,2016,2018,2020,2022,2024,2026,2028],{"class":163,"line":182},[161,2015,1011],{"class":249},[161,2017,383],{"class":382},[161,2019,1296],{"class":245},[161,2021,553],{"class":253},[161,2023,2000],{"class":249},[161,2025,576],{"class":253},[161,2027,1311],{"class":1145},[161,2029,925],{"class":253},[161,2031,2032,2034,2036,2038,2040,2042],{"class":163,"line":188},[161,2033,379],{"class":249},[161,2035,383],{"class":382},[161,2037,250],{"class":249},[161,2039,254],{"class":253},[161,2041,258],{"class":257},[161,2043,261],{"class":253},[161,2045,2046,2048,2050,2052,2054,2056],{"class":163,"line":280},[161,2047,396],{"class":249},[161,2049,383],{"class":382},[161,2051,250],{"class":249},[161,2053,254],{"class":253},[161,2055,363],{"class":257},[161,2057,261],{"class":253},[161,2059,2060,2062,2064,2066,2068,2070],{"class":163,"line":293},[161,2061,444],{"class":443},[161,2063,447],{"class":253},[161,2065,396],{"class":249},[161,2067,452],{"class":382},[161,2069,455],{"class":249},[161,2071,458],{"class":253},[161,2073,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092],{"class":163,"line":299},[161,2075,483],{"class":443},[161,2077,447],{"class":253},[161,2079,396],{"class":249},[161,2081,490],{"class":382},[161,2083,493],{"class":257},[161,2085,496],{"class":382},[161,2087,455],{"class":249},[161,2089,490],{"class":382},[161,2091,503],{"class":257},[161,2093,506],{"class":253},[161,2095,2096,2099,2101,2103],{"class":163,"line":304},[161,2097,2098],{"class":245},"       header",[161,2100,553],{"class":253},[161,2102,996],{"class":257},[161,2104,925],{"class":253},[161,2106,2107,2109,2111,2113,2115,2117,2119],{"class":163,"line":310},[161,2108,1153],{"class":245},[161,2110,1006],{"class":245},[161,2112,553],{"class":253},[161,2114,1011],{"class":249},[161,2116,576],{"class":253},[161,2118,1017],{"class":1016},[161,2120,925],{"class":253},[161,2122,2123,2125],{"class":163,"line":323},[161,2124,511],{"class":443},[161,2126,514],{"class":253},[161,2128,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161,2163],{"class":163,"line":535},[161,2130,483],{"class":443},[161,2132,447],{"class":253},[161,2134,396],{"class":249},[161,2136,490],{"class":382},[161,2138,493],{"class":257},[161,2140,496],{"class":382},[161,2142,550],{"class":245},[161,2144,553],{"class":253},[161,2146,557],{"class":556},[161,2148,560],{"class":245},[161,2150,563],{"class":556},[161,2152,560],{"class":245},[161,2154,568],{"class":556},[161,2156,560],{"class":245},[161,2158,573],{"class":556},[161,2160,576],{"class":253},[161,2162,455],{"class":249},[161,2164,581],{"class":253},[161,2166,2167,2169,2171,2173],{"class":163,"line":584},[161,2168,2098],{"class":245},[161,2170,553],{"class":253},[161,2172,996],{"class":257},[161,2174,925],{"class":253},[161,2176,2177,2180,2182,2184,2186,2188],{"class":163,"line":591},[161,2178,2179],{"class":249},"       $id",[161,2181,383],{"class":382},[161,2183,1103],{"class":245},[161,2185,553],{"class":253},[161,2187,379],{"class":249},[161,2189,925],{"class":253},[161,2191,2192,2195,2197,2199,2201,2203,2205,2207,2209],{"class":163,"line":596},[161,2193,2194],{"class":443},"       if",[161,2196,447],{"class":253},[161,2198,1119],{"class":382},[161,2200,1122],{"class":245},[161,2202,553],{"class":253},[161,2204,1127],{"class":249},[161,2206,576],{"class":253},[161,2208,1132],{"class":249},[161,2210,1135],{"class":253},[161,2212,2213,2216,2218,2220],{"class":163,"line":602},[161,2214,2215],{"class":245},"           http_response_code",[161,2217,553],{"class":253},[161,2219,1146],{"class":1145},[161,2221,925],{"class":253},[161,2223,2224,2227,2229,2231,2233,2235,2237],{"class":163,"line":608},[161,2225,2226],{"class":245},"           echo",[161,2228,1006],{"class":245},[161,2230,1158],{"class":253},[161,2232,1161],{"class":257},[161,2234,1164],{"class":253},[161,2236,1167],{"class":257},[161,2238,1170],{"class":253},[161,2240,2241,2244],{"class":163,"line":613},[161,2242,2243],{"class":443},"           break",[161,2245,514],{"class":253},[161,2247,2248],{"class":163,"line":637},[161,2249,2250],{"class":253},"       }\n",[161,2252,2253,2256,2258,2260,2262,2264,2266,2268,2270],{"class":163,"line":644},[161,2254,2255],{"class":249},"       $responseData",[161,2257,383],{"class":382},[161,2259,1191],{"class":253},[161,2261,1127],{"class":249},[161,2263,1196],{"class":253},[161,2265,1011],{"class":249},[161,2267,254],{"class":253},[161,2269,1127],{"class":249},[161,2271,1205],{"class":253},[161,2273,2274,2276,2278,2280,2282,2284,2286],{"class":163,"line":649},[161,2275,1153],{"class":245},[161,2277,1006],{"class":245},[161,2279,553],{"class":253},[161,2281,1216],{"class":249},[161,2283,576],{"class":253},[161,2285,1017],{"class":1016},[161,2287,925],{"class":253},[161,2289,2290,2292],{"class":163,"line":655},[161,2291,511],{"class":443},[161,2293,514],{"class":253},[161,2295,2296,2298,2300,2302,2304,2306,2308,2310,2312,2314],{"class":163,"line":661},[161,2297,483],{"class":443},[161,2299,447],{"class":253},[161,2301,396],{"class":249},[161,2303,490],{"class":382},[161,2305,624],{"class":257},[161,2307,496],{"class":382},[161,2309,455],{"class":249},[161,2311,490],{"class":382},[161,2313,503],{"class":257},[161,2315,506],{"class":253},[161,2317,2318,2320,2322,2324],{"class":163,"line":666},[161,2319,2098],{"class":245},[161,2321,553],{"class":253},[161,2323,996],{"class":257},[161,2325,925],{"class":253},[161,2327,2328,2331,2333,2335,2337,2339,2341,2343,2345,2347],{"class":163,"line":706},[161,2329,2330],{"class":249},"       $requestBody",[161,2332,383],{"class":382},[161,2334,1296],{"class":245},[161,2336,553],{"class":253},[161,2338,917],{"class":245},[161,2340,553],{"class":253},[161,2342,1305],{"class":257},[161,2344,1308],{"class":253},[161,2346,1311],{"class":1145},[161,2348,925],{"class":253},[161,2350,2351,2354,2356,2358,2360,2362],{"class":163,"line":713},[161,2352,2353],{"class":249},"       $name",[161,2355,383],{"class":382},[161,2357,1323],{"class":249},[161,2359,254],{"class":253},[161,2361,1328],{"class":257},[161,2363,261],{"class":253},[161,2365,2366,2368,2370,2372,2374,2376],{"class":163,"line":718},[161,2367,2194],{"class":443},[161,2369,447],{"class":253},[161,2371,1339],{"class":245},[161,2373,553],{"class":253},[161,2375,1344],{"class":249},[161,2377,1135],{"class":253},[161,2379,2380,2382,2384,2386],{"class":163,"line":724},[161,2381,2215],{"class":245},[161,2383,553],{"class":253},[161,2385,1146],{"class":1145},[161,2387,925],{"class":253},[161,2389,2390,2392,2394,2396,2398,2400,2402],{"class":163,"line":730},[161,2391,2226],{"class":245},[161,2393,1006],{"class":245},[161,2395,1158],{"class":253},[161,2397,1161],{"class":257},[161,2399,1164],{"class":253},[161,2401,1371],{"class":257},[161,2403,1170],{"class":253},[161,2405,2406],{"class":163,"line":735},[161,2407,2250],{"class":253},[161,2409,2410,2413,2415,2417,2419],{"class":163,"line":781},[161,2411,2412],{"class":249},"       $users",[161,2414,1385],{"class":253},[161,2416,1388],{"class":382},[161,2418,1391],{"class":249},[161,2420,514],{"class":253},[161,2422,2423,2426,2428,2430,2432,2434,2436,2438],{"class":163,"line":788},[161,2424,2425],{"class":249},"       $data",[161,2427,383],{"class":382},[161,2429,1006],{"class":245},[161,2431,553],{"class":253},[161,2433,1011],{"class":249},[161,2435,576],{"class":253},[161,2437,1017],{"class":1016},[161,2439,925],{"class":253},[161,2441,2442,2445,2447,2449,2451,2453],{"class":163,"line":793},[161,2443,2444],{"class":245},"       file_put_contents",[161,2446,553],{"class":253},[161,2448,922],{"class":249},[161,2450,576],{"class":253},[161,2452,947],{"class":249},[161,2454,925],{"class":253},[161,2456,2457,2459,2461,2463,2465,2467,2469],{"class":163,"line":799},[161,2458,1153],{"class":245},[161,2460,1006],{"class":245},[161,2462,1158],{"class":253},[161,2464,1438],{"class":257},[161,2466,1164],{"class":253},[161,2468,1443],{"class":257},[161,2470,1170],{"class":253},[161,2472,2473,2475],{"class":163,"line":805},[161,2474,511],{"class":443},[161,2476,514],{"class":253},[161,2478,2479,2481,2483,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513],{"class":163,"line":811},[161,2480,483],{"class":443},[161,2482,447],{"class":253},[161,2484,396],{"class":249},[161,2486,490],{"class":382},[161,2488,677],{"class":257},[161,2490,496],{"class":382},[161,2492,550],{"class":245},[161,2494,553],{"class":253},[161,2496,557],{"class":556},[161,2498,560],{"class":245},[161,2500,563],{"class":556},[161,2502,560],{"class":245},[161,2504,568],{"class":556},[161,2506,560],{"class":245},[161,2508,573],{"class":556},[161,2510,576],{"class":253},[161,2512,455],{"class":249},[161,2514,581],{"class":253},[161,2516,2517,2519,2521,2523],{"class":163,"line":816},[161,2518,2098],{"class":245},[161,2520,553],{"class":253},[161,2522,996],{"class":257},[161,2524,925],{"class":253},[161,2526,2527,2529,2531,2533,2535,2537],{"class":163,"line":825},[161,2528,2179],{"class":249},[161,2530,383],{"class":382},[161,2532,1103],{"class":245},[161,2534,553],{"class":253},[161,2536,379],{"class":249},[161,2538,925],{"class":253},[161,2540,2541,2543,2545,2547,2549,2551,2553,2555,2557],{"class":163,"line":832},[161,2542,2194],{"class":443},[161,2544,447],{"class":253},[161,2546,1119],{"class":382},[161,2548,1122],{"class":245},[161,2550,553],{"class":253},[161,2552,1127],{"class":249},[161,2554,576],{"class":253},[161,2556,1132],{"class":249},[161,2558,1135],{"class":253},[161,2560,2562,2564,2566,2568],{"class":163,"line":2561},40,[161,2563,2215],{"class":245},[161,2565,553],{"class":253},[161,2567,1146],{"class":1145},[161,2569,925],{"class":253},[161,2571,2573,2575,2577,2579,2581,2583,2585],{"class":163,"line":2572},41,[161,2574,2226],{"class":245},[161,2576,1006],{"class":245},[161,2578,1158],{"class":253},[161,2580,1161],{"class":257},[161,2582,1164],{"class":253},[161,2584,1167],{"class":257},[161,2586,1170],{"class":253},[161,2588,2590,2592],{"class":163,"line":2589},42,[161,2591,2243],{"class":443},[161,2593,514],{"class":253},[161,2595,2597],{"class":163,"line":2596},43,[161,2598,2250],{"class":253},[161,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620],{"class":163,"line":2601},44,[161,2603,2330],{"class":249},[161,2605,383],{"class":382},[161,2607,1296],{"class":245},[161,2609,553],{"class":253},[161,2611,917],{"class":245},[161,2613,553],{"class":253},[161,2615,1305],{"class":257},[161,2617,1308],{"class":253},[161,2619,1311],{"class":1145},[161,2621,925],{"class":253},[161,2623,2625,2627,2629,2631,2633,2635],{"class":163,"line":2624},45,[161,2626,2353],{"class":249},[161,2628,383],{"class":382},[161,2630,1323],{"class":249},[161,2632,254],{"class":253},[161,2634,1328],{"class":257},[161,2636,261],{"class":253},[161,2638,2640,2642,2644,2646,2648,2650],{"class":163,"line":2639},46,[161,2641,2194],{"class":443},[161,2643,447],{"class":253},[161,2645,1339],{"class":245},[161,2647,553],{"class":253},[161,2649,1344],{"class":249},[161,2651,1135],{"class":253},[161,2653,2655,2657,2659,2661],{"class":163,"line":2654},47,[161,2656,2215],{"class":245},[161,2658,553],{"class":253},[161,2660,1146],{"class":1145},[161,2662,925],{"class":253},[161,2664,2666,2668,2670,2672,2674,2676,2678],{"class":163,"line":2665},48,[161,2667,2226],{"class":245},[161,2669,1006],{"class":245},[161,2671,1158],{"class":253},[161,2673,1161],{"class":257},[161,2675,1164],{"class":253},[161,2677,1371],{"class":257},[161,2679,1170],{"class":253},[161,2681,2683],{"class":163,"line":2682},49,[161,2684,2250],{"class":253},[161,2686,2688,2690,2692,2694,2696,2698,2700],{"class":163,"line":2687},50,[161,2689,2412],{"class":249},[161,2691,254],{"class":253},[161,2693,1127],{"class":249},[161,2695,1684],{"class":253},[161,2697,1388],{"class":382},[161,2699,1391],{"class":249},[161,2701,514],{"class":253},[161,2703,2705,2707,2709,2711,2713,2715,2717,2719],{"class":163,"line":2704},51,[161,2706,2425],{"class":249},[161,2708,383],{"class":382},[161,2710,1006],{"class":245},[161,2712,553],{"class":253},[161,2714,1011],{"class":249},[161,2716,576],{"class":253},[161,2718,1017],{"class":1016},[161,2720,925],{"class":253},[161,2722,2724,2726,2728,2730,2732,2734],{"class":163,"line":2723},52,[161,2725,2444],{"class":245},[161,2727,553],{"class":253},[161,2729,922],{"class":249},[161,2731,576],{"class":253},[161,2733,947],{"class":249},[161,2735,925],{"class":253},[161,2737,2739,2741,2743,2745,2747,2749,2751],{"class":163,"line":2738},53,[161,2740,1153],{"class":245},[161,2742,1006],{"class":245},[161,2744,1158],{"class":253},[161,2746,1438],{"class":257},[161,2748,1164],{"class":253},[161,2750,1737],{"class":257},[161,2752,1170],{"class":253},[161,2754,2756,2758],{"class":163,"line":2755},54,[161,2757,511],{"class":443},[161,2759,514],{"class":253},[161,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801],{"class":163,"line":2762},55,[161,2764,483],{"class":443},[161,2766,447],{"class":253},[161,2768,396],{"class":249},[161,2770,490],{"class":382},[161,2772,746],{"class":257},[161,2774,749],{"class":443},[161,2776,752],{"class":257},[161,2778,496],{"class":382},[161,2780,550],{"class":245},[161,2782,553],{"class":253},[161,2784,557],{"class":556},[161,2786,560],{"class":245},[161,2788,563],{"class":556},[161,2790,560],{"class":245},[161,2792,568],{"class":556},[161,2794,560],{"class":245},[161,2796,573],{"class":556},[161,2798,576],{"class":253},[161,2800,455],{"class":249},[161,2802,581],{"class":253},[161,2804,2806,2808,2810,2812],{"class":163,"line":2805},56,[161,2807,2098],{"class":245},[161,2809,553],{"class":253},[161,2811,996],{"class":257},[161,2813,925],{"class":253},[161,2815,2817,2819,2821,2823,2825,2827],{"class":163,"line":2816},57,[161,2818,2179],{"class":249},[161,2820,383],{"class":382},[161,2822,1103],{"class":245},[161,2824,553],{"class":253},[161,2826,379],{"class":249},[161,2828,925],{"class":253},[161,2830,2832,2834,2836,2838,2840,2842,2844,2846],{"class":163,"line":2831},58,[161,2833,2194],{"class":443},[161,2835,447],{"class":253},[161,2837,1339],{"class":245},[161,2839,553],{"class":253},[161,2841,1011],{"class":249},[161,2843,254],{"class":253},[161,2845,1127],{"class":249},[161,2847,1847],{"class":253},[161,2849,2851,2853,2855,2857],{"class":163,"line":2850},59,[161,2852,2215],{"class":245},[161,2854,553],{"class":253},[161,2856,1146],{"class":1145},[161,2858,925],{"class":253},[161,2860,2862,2864,2866,2868,2870,2872,2874],{"class":163,"line":2861},60,[161,2863,2226],{"class":245},[161,2865,1006],{"class":245},[161,2867,1158],{"class":253},[161,2869,1161],{"class":257},[161,2871,1164],{"class":253},[161,2873,1167],{"class":257},[161,2875,1170],{"class":253},[161,2877,2879,2881],{"class":163,"line":2878},61,[161,2880,2243],{"class":443},[161,2882,514],{"class":253},[161,2884,2886],{"class":163,"line":2885},62,[161,2887,2250],{"class":253},[161,2889,2891,2894,2896,2898,2900,2902],{"class":163,"line":2890},63,[161,2892,2893],{"class":245},"       unset",[161,2895,553],{"class":253},[161,2897,1011],{"class":249},[161,2899,254],{"class":253},[161,2901,1127],{"class":249},[161,2903,1170],{"class":253},[161,2905,2907,2909,2911,2913,2915,2917,2919,2921],{"class":163,"line":2906},64,[161,2908,2425],{"class":249},[161,2910,383],{"class":382},[161,2912,1006],{"class":245},[161,2914,553],{"class":253},[161,2916,1011],{"class":249},[161,2918,576],{"class":253},[161,2920,1017],{"class":1016},[161,2922,925],{"class":253},[161,2924,2926,2928,2930,2932,2934,2936],{"class":163,"line":2925},65,[161,2927,2444],{"class":245},[161,2929,553],{"class":253},[161,2931,922],{"class":249},[161,2933,576],{"class":253},[161,2935,947],{"class":249},[161,2937,925],{"class":253},[161,2939,2941,2943,2945,2947,2949,2951,2953],{"class":163,"line":2940},66,[161,2942,1153],{"class":245},[161,2944,1006],{"class":245},[161,2946,1158],{"class":253},[161,2948,1438],{"class":257},[161,2950,1164],{"class":253},[161,2952,1945],{"class":257},[161,2954,1170],{"class":253},[161,2956,2958,2960],{"class":163,"line":2957},67,[161,2959,511],{"class":443},[161,2961,514],{"class":253},[161,2963,2965,2967],{"class":163,"line":2964},68,[161,2966,819],{"class":443},[161,2968,822],{"class":253},[161,2970,2972,2974,2976,2978],{"class":163,"line":2971},69,[161,2973,1140],{"class":245},[161,2975,553],{"class":253},[161,2977,1146],{"class":1145},[161,2979,925],{"class":253},[161,2981,2983,2985,2987,2989,2991,2993,2996],{"class":163,"line":2982},70,[161,2984,1153],{"class":245},[161,2986,1006],{"class":245},[161,2988,1158],{"class":253},[161,2990,1161],{"class":257},[161,2992,1164],{"class":253},[161,2994,2995],{"class":257}," \"We cannot find what you're looking for.\"",[161,2997,1170],{"class":253},[161,2999,3001,3003],{"class":163,"line":3000},71,[161,3002,511],{"class":443},[161,3004,514],{"class":253},[161,3006,3008],{"class":163,"line":3007},72,[161,3009,835],{"class":253},[27,3011,3012],{"id":3012},"额外内容",[17,3014,3015],{},"在这种情况下，我不希望删除我的所有用户，所以我加了一个新的语句，如果只剩下最后一个用户，它将不会被删除，像这样",[105,3017,3019],{"className":230,"code":3018,"language":232,"meta":114,"style":114},"if (sizeof($users) == 1){\n   http_response_code(404);\n   echo json_encode(['error' => 'there is only one user left. you cannot delete it!']);\n   break;\n}\n",[112,3020,3021,3047,3058,3075,3081],{"__ignoreMap":114},[161,3022,3023,3026,3028,3031,3033,3035,3038,3041,3044],{"class":163,"line":164},[161,3024,3025],{"class":443},"if",[161,3027,447],{"class":253},[161,3029,3030],{"class":245},"sizeof",[161,3032,553],{"class":253},[161,3034,1011],{"class":249},[161,3036,3037],{"class":253},") ",[161,3039,3040],{"class":382},"==",[161,3042,3043],{"class":1145}," 1",[161,3045,3046],{"class":253},"){\n",[161,3048,3049,3052,3054,3056],{"class":163,"line":170},[161,3050,3051],{"class":245},"   http_response_code",[161,3053,553],{"class":253},[161,3055,1146],{"class":1145},[161,3057,925],{"class":253},[161,3059,3060,3062,3064,3066,3068,3070,3073],{"class":163,"line":176},[161,3061,1003],{"class":245},[161,3063,1006],{"class":245},[161,3065,1158],{"class":253},[161,3067,1161],{"class":257},[161,3069,1164],{"class":253},[161,3071,3072],{"class":257}," 'there is only one user left. you cannot delete it!'",[161,3074,1170],{"class":253},[161,3076,3077,3079],{"class":163,"line":182},[161,3078,1024],{"class":443},[161,3080,514],{"class":253},[161,3082,3083],{"class":163,"line":188},[161,3084,835],{"class":253},[27,3086,3087],{"id":3087},"源码",[17,3089,3090,3091,3096],{},"你可以在",[21,3092,3095],{"href":3093,"rel":3094},"https://github.com/amirkamizi/php-simple-restful-api",[25],"原作者的 github"," 上看到完整注释的源代码以及 post man 集合",[27,3098,3099],{"id":3099},"总结",[17,3101,3102],{},"现在你知道如何在 PHP 中创建一个简单的 RESTful API。",[17,3104,3105],{},"我推荐你打开一个 PHP 文件并复习所有的这些我们进行的步骤，并且像本文一样添加一些额外的资源",[17,3107,3108],{},"如果你有任何的建议、问题或者观点，请联系文章原作者，他期待着听到你的声音。",[27,3110,3111],{"id":3111},"要点",[414,3113,3114,3117,3120,3123,3126],{},[58,3115,3116],{},"不使用框架，用 PHP 创建一个 RESTful API",[58,3118,3119],{},"在 PHP 中使用优雅的 URL",[58,3121,3122],{},"处理请求的 body",[58,3124,3125],{},"使用 Json 文件作为你的数据库",[58,3127,3128],{},"使用多个变量作为 switch 的关键词",[3130,3131,3132],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sW2Sy, html code.shiki .sW2Sy{--shiki-default:#A0A1A7;--shiki-default-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic}html pre.shiki code .s_Sar, html code.shiki .s_Sar{--shiki-default:#0184BC;--shiki-dark:#56B6C2}html pre.shiki code .sJa8x, html code.shiki .sJa8x{--shiki-default:#E45649;--shiki-dark:#E06C75}html pre.shiki code .s5ixo, html code.shiki .s5ixo{--shiki-default:#383A42;--shiki-dark:#ABB2BF}html pre.shiki code .sDhpE, html code.shiki .sDhpE{--shiki-default:#50A14F;--shiki-dark:#98C379}html pre.shiki code .sknuh, html code.shiki .sknuh{--shiki-default:#383A42;--shiki-dark:#56B6C2}html pre.shiki code .sLKXg, html code.shiki .sLKXg{--shiki-default:#A626A4;--shiki-dark:#C678DD}html pre.shiki code .sDaw7, html code.shiki .sDaw7{--shiki-default:#0184BC;--shiki-dark:#E06C75}html pre.shiki code .sxymB, html code.shiki .sxymB{--shiki-default:#986801;--shiki-dark:#ABB2BF}html pre.shiki code .sAGMh, html code.shiki .sAGMh{--shiki-default:#986801;--shiki-dark:#D19A66}html pre.shiki code .sblXP, html code.shiki .sblXP{--shiki-default:#383A42;--shiki-dark:#C678DD}",{"title":114,"searchDepth":170,"depth":170,"links":3134},[3135,3136,3137,3138,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154],{"id":29,"depth":170,"text":29},{"id":50,"depth":170,"text":50},{"id":72,"depth":170,"text":72},{"id":89,"depth":170,"text":90,"children":3139},[3140,3141],{"id":100,"depth":176,"text":100},{"id":140,"depth":176,"text":140},{"id":217,"depth":170,"text":218},{"id":342,"depth":170,"text":342},{"id":848,"depth":170,"text":848},{"id":958,"depth":170,"text":958},{"id":1035,"depth":170,"text":1035},{"id":1249,"depth":170,"text":1249},{"id":1466,"depth":170,"text":1466},{"id":1753,"depth":170,"text":1753},{"id":1961,"depth":170,"text":1961},{"id":3012,"depth":170,"text":3012},{"id":3087,"depth":170,"text":3087},{"id":3099,"depth":170,"text":3099},{"id":3111,"depth":170,"text":3111},[3156,3162],{"title":3157,"path":3158,"stem":3159,"date":3160,"lang":3161,"children":-1},"vuejs、php、caddy 与 docker —— web 期末大作业上云部署","/2023/12/27/php-and-vuejs-project-deploy-on-caddy","posts/zh/php-and-vuejs-project-deploy-on-caddy","2023-12-27 22:09:00","zh-CN",{"title":3163,"path":3164,"stem":3165,"date":3166,"lang":3161,"children":-1},"在 Hexo Fluid 主题中使用霞鹜文楷","/2023/11/28/use-lxgw-wenkai-in-hexo-fluid","posts/zh/use-lxgw-wenkai-in-hexo-fluid","2023-11-28 00:16:23",null,1777565048702]