-1

I have a simple PHP API. I just used cURL for the Client and $_POST to accept the requests at the Server side. Something like ..

Client:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/api-server");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('q' => 'world!'));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1);
$response = curl_exec($ch);
curl_close($ch);

echo json_decode($response);
?>

Server:

<?php
echo json_encode("hello, ".$_POST["q"]);
?>

My questions here are:

  • Am i even still following the standard API logic anyway?
  • How to "PROTECT" this API Server Access?
4

3 回答 3

1

不要尝试编写 API 引擎,这些是行业标准。看看 Soap 或 REST。

以下是一些可以完成所有繁重工作的库:

然后为了保护这些,您可以使用基本的 http 保护,通过 OAuth 等

于 2013-05-15T04:18:08.793 回答
1

好的,我在这里找到了我上面问的内容:http: //php.net/manual/en/features.http-auth.php

它只是用于 API 页面:

if ( $_SERVER['PHP_AUTH_USER'] == $MY_API_USER && $_SERVER['PHP_AUTH_PW'] == $MY_API_PW) {
    ..
    ..
} else {
    header('WWW-Authenticate: Basic realm="Sorry, this API is protected. You may need a valid authentication."');
    header('HTTP/1.0 401 Unauthorized');
    exit;
}

在调用者/请求者端,将这两行添加到cURL调用中:

..
curl_setopt($ch, CURLOPT_USERPWD, $MY_API_USER.":".$MY_API_PWD);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
..

对我来说,这就是全部。

于 2013-06-11T02:20:45.497 回答
0

虽然有明确定义的通信协议(如 HTTP)和传输格式(如 JSON),但 API 架构的实际实现留给了开发人员。

许多现有的工具,从完整的框架到模块化组件,都存在以帮助构建 API 层,但最终你需要构建一些可以工作的东西。

如果您需要服务器,请关注服务器,并在可用时关注符合标准的实现,否则关注最佳实践;包括资源架构、身份验证等方面。

现在,您正在喷出一些连接 JSON 的查询参数。我怀疑这是预期的最终结果,除非你在echo服务器之后。

在服务或领域模型之后为您的 API 建模;将方法和属性公开为 API 层的资源。

附录:哦,至于“保护”;已经提到的 HTTP Basic 或 OAuth 技术是很好的候选者,但我的回答的核心是:这取决于你需要什么。

于 2013-05-15T05:02:19.083 回答