Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用RESTAPI处理URL?_Php_Api_Url - Fatal编程技术网

Php 使用RESTAPI处理URL?

Php 使用RESTAPI处理URL?,php,api,url,Php,Api,Url,我知道,当创建一个php网站时,我可以使用index.php?id=2这样的东西,index.php可以使用:$\u GET['id']获取id。我想为我的一个网站创建一个api,我看到了不同的例子 <?php require_once 'Kunststube/Router/Router.php'; $r = new Kunststube\Router\Router; $r->add('/foo'); ... $r->route($_GET['url']); 推特: ht

我知道,当创建一个php网站时,我可以使用index.php?id=2这样的东西,index.php可以使用:$\u GET['id']获取id。我想为我的一个网站创建一个api,我看到了不同的例子

<?php

require_once 'Kunststube/Router/Router.php';

$r = new Kunststube\Router\Router;
$r->add('/foo');
...
$r->route($_GET['url']);
推特:

https://api.twitter.com/1.1/statuses/mentions_timeline.json?count=2&since_id=14927799
因此,我在我的FTP服务器上创建了一个文件夹“1.1”和一个文件夹“statuses”,其中的文件提到了$\u timeline.json,它理解$\u GET['count']等

其他API如下所示:

https://quote.fm/api/recommendation/delete
GET /foo/bar/baz?some=parameters HTTP/1.1
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=/$1 [QSA,L] 
</IfModule>
我可以删除一条建议,其中包括:

https://quote.fm/api/recommendation/delete/?id=1 or
https://quote.fm/api/recommendation/delete/1
通常对于网站,我可以使用mod_rewrite创建这样的url结构。据我所知,我在这里为不同的部分创建了不同的URL:

https://xyz.com/api/user/get/1
https://xyz.com/api/user/delete/1
因此,我创建了一个文件夹用户,其中的子文件夹delete和get位于FTP服务器上,每个文件夹都有一个index.php文件?我的脚本如何知道/1是id=1

<?php

require_once 'Kunststube/Router/Router.php';

$r = new Kunststube\Router\Router;
$r->add('/foo');
...
$r->route($_GET['url']);
有人理解我吗?我很难理解我的脚本如何将url结构转换为来自应用程序的必要数据片段


谢谢

我将从这里复制这一章:

什么是URL以及如何设置路由 URL只是由几个部分组成的字符串:

http://example.com/foo?bar=baz
  |         |       |    |
  |         |       |    +- query
  |         |       +- path
  |         +- host
  +- scheme
URL还可以具有身份验证信息、端口和地址 片段,但我们会尽量保持简单。kunstube\路由器 专门处理路径。方案和查询通常具有 对路由没有影响,主机通常由web处理 服务器

假设使用Apache web服务器进行典型设置,Apache通常 为你做“路由”。它接收一个HTTP请求 大概是这样的:

https://quote.fm/api/recommendation/delete
GET /foo/bar/baz?some=parameters HTTP/1.1
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=/$1 [QSA,L] 
</IfModule>
web服务器现在可以自由地以任何方式响应此请求 选择。大多数web服务器的默认操作是映射URL的 硬盘上文件的路径。web服务器将首先找出 适当的DocumentRoot是什么,即 已配置为“公共web文件夹”。让我们假设 DocumentRoot是
/var/www
。然后它将连接请求路径 到该根,结果是
/var/www/foo/bar/baz
。然后它将尝试 确定磁盘上是否存在该文件,并将其作为响应提供。如果 请求的文件以
.php
结尾,或者以其他方式配置Apache 要将该文件视为PHP文件,它将首先通过 PHP解释器,然后返回其输出

要使用PHP路由器使用我们自己的自定义路由,我们需要拦截 Apache查找要在磁盘上提供服务的文件的过程。这个可以 在Apache配置文件中完成;但如果你有权访问 这些文件我想你知道你在做什么,不会去查的 最佳设置的具体细节。相反,我将报道 无法或不想编辑核心Apache的典型情况 配置文件,而是求助于
.htaccess
文件。什么时候
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ index.php?url=/$1 [QSA,L] 
</IfModule>
Apache遍历磁盘上的目录结构以查找 正确的文件服务,它检查每个目录中是否有一个文件 名为
。htaccess
放置在其中。如果找到一个,它将执行
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ index.php?url=/$1 [QSA,L] 
</IfModule>
和/或将其中定义的规则合并到文件查找中 进程,然后继续到路径中的下一个更深的目录

您想要实现的是让Apache“查找”并执行一个 任何和所有请求的特定PHP文件,并生成原始URL 可用于该PHP文件,以便它可以自己进行路由。最简单的, 最肮脏的方法是一个简单的重写规则:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ index.php?url=/$1 [QSA,L] 
</IfModule>
.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ index.php?url=/$1 [QSA,L] 
</IfModule>
第二个
url
参数将替换第一个参数。如果您需要使用 在应用程序中的查询参数
url
中,选择其他 重写规则的参数名称

其次,请注意kunstube\Router希望URL传递给
route()
/
开头。您可以在编辑过程中添加该斜杠 重写过程如上所示,或在PHP中;只要确保它是 在那里

第三,您通常也有不想通过路由传送的文件 PHP,例如CSS和图像文件。你会想要这些东西的 由Apache直接提供。这方面的良好设置如下:

/var
    /Kunststube
        /Router
            ...
    /MyApp
        MyScript.php
        ...
    /www
        .htaccess
        index.php
        /css
            style.css
            ...
        /img
            kitten.jpg
            ...
从公共web根目录中取出所有实际的PHP文件, 只保留公共资产文件和一个最小的
index.php
文件。
<?php

require_once 'Kunststube/Router/Router.php';

$r = new Kunststube\Router\Router;
$r->add('/foo');
...
$r->route($_GET['url']);
将重写规则调整为如下所示:

https://quote.fm/api/recommendation/delete
GET /foo/bar/baz?some=parameters HTTP/1.1
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=/$1 [QSA,L] 
</IfModule>
事实上,完全在别处定义路线是更好的做法 并使用自动加载程序加载所需文件,但这超出了 本文件的范围

你要么在寻找“漂亮的URL”(谷歌it),要么在寻找一个完整的路由器(请阅读以下内容:)