我最近被要求创建一个可以使用PHP处理数据的API。我不习惯PHP,所以我不太清楚如何继续。
基本上我想要实现的是创建一个API来处理用户可以像这样调用的表单帖子:
<form METHOD="POST" ACTION="https://MyURL/index.php" id=aForm name=aForm>
<input type="hidden" id="Lite_Merchant_ApplicationID" name="Lite_Merchant_ApplicationID" value="Your Application Id">
(various other fields to be processed)
</form>
我可能错误地称这是一个API,因为它应该处理一个表单帖子。但是我需要为用户编译文档以便能够与我们的系统集成并将表单发布到我们的URL,然后URL将处理表单中的信息。
有什么好的教程可供我查看吗?我不确定我正在查看的那些是否适用,因为他们没有提到使用表单来调用API?例如 https://docs.phalconphp.com/en/latest/reference/tutorial-rest.html 和 http://coreymaynard.com/blog/creating-a-restful-api-with-php/
或者我只是在PHP中正常处理表单并使用以下方法访问值:
$_POST["name"];
如果是这种情况,用户是否可以使用他们选择的语言调用API?
如果有任何我需要查看或考虑的事情,那么我会有另外一个问题,因为它会是“https”吗?
如果不是非常具体,请提前致谢并道歉,任何建议/指示都将不胜感激。
其他信息: 系统需要能够执行重定向,登录凭据将在隐藏表单输入中发送
答案 0 :(得分:4)
你的问题有点广泛,你可能会以一种不符合我理解的方式使用文字。
API通常不仅仅是一个方法,而处理表单POST事件只是 - 表单处理程序。差异不仅仅是语义 - 对于API,您可能需要考虑版本控制(如何在不破坏客户端应用程序的情况下升级API),抽象(如何使API易于使用),文档和安全性(如何您确保只有授权用户/应用程序使用您的API?)。 API通常具有多个用户,并且通常需要支持客户端应用程序的可伸缩性要求
REST是设计API的好方法 - 它很容易为客户理解,许多聪明的人已经解决了身份验证/授权,版本控制和抽象等问题。
值得注意的是,REST使用现有的HTTP概念,因此RESTful API会公开POST请求以创建新实体。可以从具有<form>
元素的网页或REST客户端调用该POST请求。
如果您编写RESTful API,则可以使用支持HTTP的任何语言编写客户端
有许多框架可以使PHP中的RESTful Web API更容易构建。我没有使用任何,所以无法提出建议。
但是,如果您需要做的就是处理POST请求,从一个不会改变的网页 - 好吧,我不会构建一个RESTful API,我只是编写一个PHP“POST”处理程序。在这种情况下,客户端可以是任何理解您的POST参数的东西(实际上,几乎任何可以发出HTTP请求的应用程序)。
但是,在我看来,“POST Handler”和“API”之间的区别在于,当您创建API时,您会做出客户所依赖的某些承诺。 “我不会在不告诉你的情况下更改字段名称”。 “我不会在不告诉你的情况下改变地点”。 “你可以依赖我的文档所说的内容”。当您创建POST处理程序时,您只承诺HTML表单的制作者,并且您将告知该团队任何更改。
HTTPS的唯一挑战是您必须确保调用应用程序可以处理它,并且密钥可以正常工作。
答案 1 :(得分:0)
只需在PHP中正常处理表单并使用以下方法访问值:
$_POST["name"];
API用户只需通过html表单,AJAX或其他任何方式发送POST请求。 您应该为响应格式html,xml,json添加一个字段,然后使用它来格式化响应。
答案 2 :(得分:0)
检查以下链接(宁静服务)......它非常简单,符合您的要求。
http://rest.elkstein.org/2008/02/what-is-rest.html
http://www.9lessons.info/2012/05/create-restful-services-api-in-php.html
答案 3 :(得分:0)
与Neville K一起回答这里是我的公司如何处理RESTful API呼叫的一个例子。
首先我们有一个用switch语句处理调用的php文件。将不同的操作路由到所述函数和类。
/* Class file that is called on this page */
include_once "$_SERVER[DOCUMENT_ROOT]/classes/class.myclass.php";
/**
* This function makes it simpler to stop it from working for debugging purposes.
* All we have to do is comment out the one line of code apiCall($_REQUEST);
* You could have this outside of the function and it would work just as well.
* @param type $REQUEST
*/
function apiCall($REQUEST) {
$con = new MyClass();
switch ($REQUEST['action']) {
case 'getList':
/* Setting the content type to json means that the developer can
* expect a response in the form of parseable json.
*/
header('Content-Type: application/json');
echo json_encode($con->getList($REQUEST));
case 'setValue':
header('Content-Type: application/json');
echo json_encode($con->setValue($REQUEST));
case 'login':
if ($con->login($REQUEST)) {
header('Location: /index.php');
} else {
header('Content-Type: /login.php?status=Failed+Login');
}
default:
header('Content-Type: application/json');
/* If an invalid action was sent in, then this error message will be sent
* back to the user
*/
echo json_encode(['status' => 'Invalid API Call']);
}
}
/* Using $_REQUEST allows developers to access the api via GET or POST */
apiCall($_REQUEST);
然后我们处理我们调用的不同类中的所有逻辑。
class MyClass {
public function getList($REQUEST) {
$id = $REQUEST['id'];
/* code */
return ['status' => 'ok', 'results' => $array];
}
public function setList($REQUEST) {
/* code */
return ['status' => 'ok'];
}
public function login($REQUEST) {
/* code */
$_SESSION['user_id'] = $user_id;
return $login_successful;
}
}
使用JSON
适用于通过AJAX
来电发送信息的应用。使用header('Location:')
适用于没有ajax的表单提交。
然后,您可以根据处理数据提交的方式使用JavaScript ajax调用或提交。
的示例$.getJSON('/switch.php', $.param({id: id, action: 'getList'}), function (json) {
if (json) {
/*code*/
}
});
然后,您可以将带有操作的隐藏输入传递到切换页面,以进行常规表单提交。
<form action="/switch.php" method="post">
<!--hidden input named action to direct which switch to use-->
<input name="action" value="login" type="hidden"/>
<input name="username"/>
<input name="password" type="password"/>
<input type="submit"/>
</form>
这些示例适用于html / JavaScript Web应用程序。如果您使用的是JAVA,Python,.NET或其他语言,那么就像使用REST API并解析出JSON以了解如何处理应用程序逻辑一样简单。
您甚至可以使用file_get_contents
或curl
运行php到php api通话。
$data = [
'action' => 'setValue',
'information' => 'More'
];
$json = json_decode(file_get_contents('/switch.php?' . http_build_query($data)),true);
if(!empty($json)){
/*code*/
}
您可以为每个调用创建一个单独的页面,而不必担心将action
传递给每个请求。但是你的文件树开始看起来像这样。
/api/loginSubmit.php
/api/login.php
/api/getListFromId.php
/api/getList.php
/api/setValues.php
/api/getValues.php
遍历所有这些文件以找出问题的位置真的很乏味。
答案 4 :(得分:-2)