相信大家都做过PHP请求API接口获取数据,比如淘宝API,微信公众平台,天气查询,快递查询等,有的需要参照接口文档根据签名算法构造sign(签名),或者设置token,然后通过curl发送POST请求带上参数,获得返回数据,一般是json或者xml格式。

但是现在的情况反过来了,我们要开发PHP服务器端的API接口,也就是别人请求我们,我们验证请求合法性,并查询数据返回。

这种情况其实在手机app开发中用到,手机APP应用往往需要请求PHP接口获取数据,不过这个请求一般是不用经过验证的,根据不同的功能请求不同的url,通常也是get方式传参数直接获取数据。

本文简单讲讲服务器端验证请求合法性的方法,和接收参数的方式。

简单的get请求如:http://www.demo.com/api/get_cat?id=2,请求这个网址会返回一些数据,无论是谁用什么编程语言请求都能得到数据。

那么在需要验证合法性的情况下这样显然是不行的。所以需要一个秘钥,这个时候往往用POST方式请求url。

比如传递的参数中有个签名sign,值是98888,当然生成sign的方式很多而且不可能这么简单,这里只是随便写,那么服务器端接收到sign是98888,假如我们约定98888就是合法的,这个时候判断sign是否为98888就可以验证这是合法请求了。

但是这样也太简单了,一下子就被破解了,设置这个sign就毫无意义了。所以要有一个生成sign的规则,请求的时候根据这个规则生成sign传参,服务器端接收的时候也根据这个规则生成sign,如果生成的sign一致,表明这是合法请求。每次请求都会带上sign进行验证。

还有一种验证叫token,第一次请求的时候验证token,在一定时间内不用再次验证。这要分两步,第一步先请求获取token的接口得到token,第二步才是请求具体接口的功能,需要带上token传参。由于第一次请求token的时候,服务器端先把token存储起来了再返回的,所以后面的请求判断传过来的token是否存在就可以验证了。

许多接口开发都同时使用两者方式保证私密和安全。

还有一点,发送POST请求往往使用PHP的CURL模块,比如对方通过curl发送POST请求,curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string),这里$post_string是传PHP数组的形式好,还是json格式呢?

如果是传PHP数组,我这边直接$_POST[‘xx']获取参数,如果是传的json格式,我这边好像要用file_get_contents(‘php://input', ‘r')获取传过来的json数据,然后解析json得到参数。

什么情况下用第二种?

这个曾经在网上提问过,看看大家怎么回答:

对PHP来说 JSON和数组有时候真的只是一行代码的区别,如果我写可能直接回用第一种。

我觉得你想你的代码简洁一点可以用第二种,我记得weixin的php sdk好像类似就是第二种(当然那是xml格式)

还有如果对方使用面向对象直接序列化出来的json的话,用json会让他的代码更简洁一点。

第一种做法,是传输的是form表单POST协议,PHP会把PHP数组变成HTTP表单的格式,跨语言通用,但是这种并不是主流的API协议,而更像是模拟提交表单。

绝大多数API协议会用JSON POST,第二种做法,即在HTTP Body里放JSON数据。也是跨语言的,但作为API更友好。

第一种方法,直接PHP curl,如果数据内容没处理好,数组value里传了 @/xxx/xxx 这样的内容,curl会把服务器上的本地文件传出去,注意防范。

x-www-form-urlencoded是RFC标准,没什么不兼容的,岂止跨语言,还跨越时空。JSON这种是近几年想出来的,不是标准,用着方便而已。

以上这篇PHP服务器端API原理及示例讲解(接口开发)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持Devmax。

PHP服务器端API原理及示例讲解(接口开发)的更多相关文章

  1. Html5页面二次分享的实现

    这篇文章主要介绍了Html5页面二次分享的实现的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5之消息通知的使用(Web Notification)

    通知可以说是web中比较常见且重要的功能,私信、在线提问、或者一些在线即时通讯工具我们总是希望第一时间知道对方有了新的反馈。本篇文章主要介绍了HTML5之消息通知的使用(Web Notification),感兴趣的小伙伴们可以参考一下

  3. HTML5跳转小程序wx-open-launch-weapp的示例代码

    这篇文章主要介绍了HTML5跳转小程序wx-open-launch-weapp的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. ios – 我可以使用哪些iPhone OS API来实现类似于iBook页面翻转过渡的过渡动画?

    >UIKitAPI中的某个地方是否可以使用该动画,还是我必须自己实现?它肯定有3D感觉,他们可以使用OpenGLESAPI吗?解决方法Apple当然使用OpenGLES来实现它.Apple使用的实际API是私有的,但thisblogger具有示例代码的实现的开始.

  5. iOS 7,用于断开调用的私有API CTCallDisconnect不起作用

    谢谢!

  6. 我应该使用哪个高级API来管理iOS上的UDP套接字?

    在“NetworkProgrammingTopicsConceptualGuide”的“UsingSocketsandStreams”一章中,Apple说:Note:POSIXnetworkingdoesnotactivatethecellularradiooniOS.Forthisreason,thePOSIXnetworkingAPIisgenerallydiscouragediniOS.同样

  7. 保护MY REST API仅用于MY IOS APP

    我在Laravel中设计一个RESTAPI,用于我的ios应用程序.目前我被困在以下几点:如何保护我的RESTAPI只允许访问我的ios应用程序?听起来我需要通过向我的IOSAPP授予一个私钥来将类似于HMAC方法的内容合并到我的IOSAPP代码中.当从iosapp中运行请求时,我传递带有私钥和其他数据的哈希,然后当在服务器上收到请求时,我通过重新计算哈希来检测请求是否来自应用程序内的用户.我不知道这是否安全&我会认为不是吗?

  8. ios – 尝试向我们分配IP而不是localhost或home时,NSURLSession失败

    我有一台本地运行的服务器(我的IP是192.168.0.98),并且已经尝试使用一些网络代码来访问它.最初这是通过AFNetworking完成的,但我现在用这样的NSURLSession完成了它:然后我用这3个URL运行它:>http://localhost:8080/api–>作品.>http://127.0.0.1:8080/api–>作品.>http://192.168.0.98:8080/

  9. 适用于iOS的Google云端硬盘实时API

    我想使用GoogleDrive和新的实时API在我的iOS应用中实现实时协作.我知道我可以在Objective-C中设置一个Web视图,并在Web视图和我的本机应用程序之间建立双向通信,因此使用javascript库,但我担心这对于高容量来说效率低下数据流量.我希望可能会有一个原生的解决方案即将出现.有关Objective-C的GoogleApi客户端库是否会更新以包含Google云端硬盘实时API的任何消息?

  10. ios – 如何通过iPhone中的Graph API在Facebook上“喜欢”和“评论”?

    我正在使用图形api显示新闻源.我对以下问题有疑问.>我想为每个新闻提要帖子提供“赞”功能.>我想为每个新闻提要帖子提供“评论”功能.有人可以帮助我如何使用iPhone中的图形API来解决这个问题.解决方法请参考我的答案:HowtocommentorlikeaphotoinfacebookthroughFBconnectorGraphAPIiniPhoneSDK?只需将您的访问令牌发送到https

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部