带有可选字段的REST API Endpoint.htaccess(PHP)


REST API Endpoint .htaccess with Optional Fields (PHP)

我对API完全陌生。我为我们的web应用程序(PHP环境)创建了一个UI,并希望开发一个API。我使用这个资源用PHP创建了一个RESTneneneba API,并使用这个资源来获得最佳实践。

到目前为止,我已经有API在工作,它将接受端点,例如:

  • api/search.json
  • api/search/log.json

添加.json是为了满足最佳实践的标准,并且不提供任何功能(除了可能充当我下一个任务的分隔符之外)。我想包括一些可选字段。我打算在.json之后以以下格式包含这些:

  • api/demanatory-term.json?可选=值
  • api/demanatory-term.json?可选=值&anotheroptional=值

这是我尝试的.htaccess解决方案:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/([^.?]+).json'?(.*)$ api/api.php?request=$1&fields=$2 [QSA,NC,L]
RewriteRule ^api/([^.?]+).json$ api/api.php?request=$1 [QSA,NC,L]
</IfModule>

这是一条继续失败的线路:

RewriteRule ^api/([^.?]+).json'?(.*)$ api/api.php?request=$1&fields=$2 [QSA,NC,L]

如果我去掉问号(从请求和.htaccess中),我可以在字段中得到我想要的结果(除了一个会破坏它的"&")。有人介意帮助我理解如何在包含"与"符号的同时捕获问号后的第二个字段吗?我很可能会使用爆炸方法将捕获分离为类方法的可选参数数组。

再说一次,我对此完全陌生。如果有人能帮我解决.htaccess问题,我会很高兴的,但任何其他建议都是受欢迎的。我没有选择在什么环境中实现它。我本想用J2EE来实现它,但。。。没有这样的运气。谢谢

我认为您很接近,但无法在重写器的pattern中匹配查询字符串。您需要匹配查询字符串或使用QSA。我稍微修改了一下规则。试试看。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteCond %{QUERY_STRING} (.+)
RewriteRule ^api/([^.?]+)'.json$ api/api.php?request=$1&fields=%1 [QSA,NC,L]
RewriteRule ^api/([^.?]+)'.json$ api/api.php?request=$1 [NC,L]
</IfModule>

请注意,它将获取请求中的整个查询字符串,并根据您的请求将其添加到fields变量中。

您也可以使用QSA标志来附加添加到重写中的查询字符串。