我的问题标题可能有点混乱。下面是一个场景,例如:我正在wordpress站点上提供一个API服务。
使用它,其他人几乎不知道什么信息。比如,如果他们在查询URL中发送用户ID,那么我会向他们发送用户电话号码。
例如:如果他们使用www.example.com/?cuid=23
现在开始init
钩子我去看看cuid
中存在$_GET
变量,如果它存在,那么我将获取电话号码并使用电话号码禁用该函数。自从init
钩子是我选择使用的最早的钩子。
function tell_phone_num(){
if(isset($_GET[\'cuid\'])){
//some one wants the service
//I\'ll get the phone number and show it -> $user_phone
//setting response format, like json etc
die($user_phone);
}
}
add_action(\'init\',\'tell_phone_num\');
这很好用。使用访问站点时
cuid
那么只有此功能才能工作。
这只是一个例子,但电话号码不是我真正的信息。我不需要身份验证,因为我提供的信息不敏感。
这是我的问题。这是正确的方法吗?或者我应该采用其他最佳实践方法吗。
SO网友:Milo
如果您想要一个更加用户友好的URL结构,您可以add a rewrite endpoint.
这将向添加和拦截请求的规则/my-api/
:
function wpd_add_api_endpoint() {
add_rewrite_endpoint( \'my-api\', EP_ROOT );
}
add_action( \'init\', \'wpd_add_api_endpoint\' );
function wpd_api_request( $request ){
if( isset( $request->query_vars[\'my-api\'] ) ){
// $request->query_vars[\'my-api\'] is a string containing everything after your url slug
// convert it to array
$parts = explode( \'/\', $request->query_vars[\'my-api\'] );
echo \'<pre>\';
print_r( $parts );
echo \'</pre>\';
die;
}
}
add_action( \'parse_request\', \'wpd_api_request\' );
刷新规则后,请尝试以下请求:
http://example.com/my-api/something/else/123/4,5,6/&7
将输出:
Array
(
[0] => something
[1] => else
[2] => 123
[3] => 4,5,6
[4] => &7
)