1、了解api

  在使用与创建自己的API之前我们需要先了解什么是API!

  API代表应用程序编程接口,而接口指的是一个特定的服务、一个应用程序或者其他程序的公共模块。

  理解SOA(面向服务的架构):

  SOA是PHP应用程序日益普及的方法,它是基于一个服务层的系统,提供系统所需要的所有功能,但这个功能提供的是应用层,并未连接到表现层。这样,多种系统就可以使用这个相同的模块化、可重复使用的功能了。(备注:在学习API的时候看过的两本有关API的书籍都有提到这个SOA,但是由于自己还是个菜鸟所以对这个理解不太深。所以对于以上SOA的含义摘抄于PHP精粹-编写高效PHP代码(美))

  在使用api是涉及到一个重要的问题是传输的数据格式:在API数据传输中主要使用XML与Json数据格式。在这就不对这两个数据格式展开讲解了。

  使用的协议时HTTP超文本传输协议。所谓的访问API简单的来说就是客户端通过HTTP来访问服务器已定义好的程序,再进一步理解就是使用编程代码通过HTTP请求API获得自己所需要的数据。看如下简单过程图:

2、理解服务类型

  RPC:即Remote ProcedureCall远程调用过程,RPC服务也就是调用远程的函数并返回需要的数据(大多数时候需要传入参数,视API而定)。RPC主要分为XML-RPC和Json-RPC。

  SOAP:即Simple Object Access Protocol简单对象访问协议,SOAP是严格定义的XML-RPC。我们通常使用WSDL(Web服务描述语言)文档描述SOAP服务(即描述服务所提供的方法地址等等的信息)。在很多语言中包括PHP都有内置的类库,可以很容易就可以处理SOAP,创建与使用SOAP服务。

  REST:REST不是一个协议,它没有严格定义的接口与数据格式,更像一套设计原则。REST将所有的一切都视为资源,通过客户端发送HTTP动词到相应的URL从而实现资源的调动。

3、各种服务的简单实例

PHP与SOAP

  简单介绍:

  PHP中含有SOAP扩展这样方便我们建立与使用SOAP类型的API。其中SOAP分为WSDL类型SOAP与非WSDL类型SOAP,在现如今大多数使用的的SOAP是含有WSDL的。个人对与这两种的理解是:含WSDL是标准类型的,因为WSDL使用了XML标准语法对你提供的方法类进行了描述(描述服务)。

  由于PHP中没有将方法类生成WSDL文件的功能函数,因此我们需要借助别的工具将WSDL文件搞出来。(讲解WSDL类型时再介绍)

  server:  public SoapServer::__construct ( mixed $wsdl [, array $options ] )

  参数:第一个参数为必要参数,如果为WSDL类型的SOAP则填入WSDL的地址(可以是相对地址或者Web地址)

其他参数包括:uri(命名空间)、location(服务器所在地址)、encoding(设置编码)、soap_version(设置soap服务版本 SOAP_1_1 or SOAP_1_2),其中前两个在非WSDL中为必要参数

  Client:  public SoapClient::SoapClient ( mixed $wsdl [, array $options ] )

  参数:第一个为必要参数

  此扩展详细介绍可看官方手册:http://php.net/manual/en/book.soap.php

1、先从简单的无WSDL入手

首先建立服务方法类即:WebService.class.php

 <?php
class WebService
{
public function test()
{
return 'WebService: test';
}
}

其次在建立Server.php提供访问入口

 <?php
include_once './WebService.class.php';
$options=array('uri'=>'', 'location'=>'' );
$server=new SoapServer(NULL,$options);
$server->setClass('WebService'); #填写类名
$server->handle();

最后访问:Client.php

 <?php
$options=array(
'uri'=>'',
'location'=>'http://www.test99.com/nowsdl/Server.php',
);
$client=new SoapClient(NULL,$options);
echo $client->test();

访问结果:

  小结:通过各种组合测试发现,不管SoapServer还是SoapClient中的参数options,对于非WSDL来说:1、uri是必须的(即使为空)2、SoapServer中的location可有可无都可以,而SoapClient的location为必要的,而且不能为空(客户端空过此数据来定位API)

(以上是自己的一些见解,若有不足或者错误请各位指出)

如果您觉得本文对你有用,不妨帮忙点个赞,或者在评论里给我一句赞美,小小成就都是今后继续为大家编写优质文章的动力,流云拜谢! 欢迎您持续关注我的博客:

作者:那一叶随风

博客地址:http://www.cnblogs.com/phpstudy2015-6/p/6156055.html

声明:本博客文章为原创,只代表本人在工作学习中某一时间内总结的观点或结论。非商业,未授权贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文链接。

 

PHP与API讲解(一)的更多相关文章

  1. 【jquery】 API讲解 内部培训资料

    资料在百度云盘 一.jquery  API讲解 1.jquery  api如何使用 jquery  api http://www.hemin.cn/jq/ 2.常用api讲解 选择器: 通过$()获取 ...

  2. Hibernate第二篇【API讲解、执行流程图】

    前言 从上一篇中已经大致介绍了Hibernate并且有了一个快速入门案例的基础了,-.本博文主要讲解Hibernate API 我们看看快速入门案例的代码用到了什么对象吧,然后一个一个讲解 publi ...

  3. Android指纹识别API讲解,让你有更好的用户体验

    我发现了一个比较怪的现象.在iPhone上使用十分普遍的指纹认证功能,在Android手机上却鲜有APP使用,我简单观察了一下,发现Android手机上基本上只有支付宝.微信和极少APP支持指纹认证功 ...

  4. smartJS 0.1 API 讲解 - FlowController

    本篇介绍0.1版中最后一个特性,FlowController:同时也对第一版总结一下,因为近两年全部都是在搞前端,都是做一些js框架类的东西,也做了不少有意思的功能,做smartjs对我来说一个是对自 ...

  5. 配置文件详解和核心api讲解

    一.配置文件详解 1.映射文件详解 1.映射配置文件的位置和名称没有限制. -建议:位置:和实体类放在统一目录下.  名称:实体类名称.hbm.xml.    2.在映射配置文件中,标签内的name属 ...

  6. smartJS 0.1 API 讲解 - PromiseEvent

    上篇简单的介绍smartjs了一些通用方法的api.这篇介绍基础的PromiseEvent(这个名字一直没想好,以前准备用callbacks的,但避免与jquery混淆,st的命名空间可以直接挂到$上 ...

  7. smartJS 0.1 API 讲解 - Trigger

    上篇介绍了PromiseEvent,本篇介绍Trigger - 基于Promise的aop的体现:(感觉自己的对这些命名一直都很挫,也懒得想了,所以就凑合的用) Trigger 在目标对象上加入触发器 ...

  8. 4.移动端自动化测试-API讲解

    一.前置代码 1.导入driver对象    from appium import webdriver 2.声明手机驱动对象  只有声明驱动对象我们才可以让手机完成脚本的操作    driver = ...

  9. UDP核心API讲解

随机推荐

  1. .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

  2. 在知乎上看到 Web Socket这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错

    在知乎上看到这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错,所以推荐给大家,非常值得一读. 作者:Ovear链接:https://www.zhihu.com/que ...

  3. 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版

    火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ- ...

  4. Autofac - 属性注入

    属性注入不同于通过构造函数方式传入参数. 这里是通过注入的方式, 在类创建完毕之后, 资源释放之前, 给属性赋值. 这里, 我重新弄一些类来演示这一篇吧. public class ClassA { ...

  5. 【C#公共帮助类】 ToolsHelper帮助类

    这个帮助类,目前我们只用到了两个,我就先更新这两个,后面有用到的,我会继续更新这个Helper帮助类 在Tools.cs中 有很多方法 跟Utils里是重复的,而且Utils里的方法更加新一点,大家可 ...

  6. C# 工厂模式+虚方法(接口、抽象方法)实现多态

    面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的d ...

  7. 敏捷转型历程 - Sprint3 Planning

    我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...

  8. sql 删除表中的重复记录

    嗯,遇见了表中存在重复的记录的问题,直接写sql删除时最快的,才不要慢慢的复制到excel表中慢慢的人工找呢.哼. 如下sql,找出重复的记录,和重复记录中ID值最小的记录(表中ID为自增长) sel ...

  9. win10系统下连接无线网络掉线问题解决办法

    打开驱动精灵----系统诊断 找一个可修复的驱动点击 选择连不上网中的查看更多 有连不上网络,网络连接受限,解决无线间歇性掉网问题 进入计算机管理----设备管理 修改无线网络属性(名称含有wirel ...

  10. python selenium

    https://segmentfault.com/a/1190000007249396?_ea=1293878