常用的接口形式(即下面的 例二):

  开发语言为PHP,数据格式为Json,传输协议为http,提交数据为Post方式,字符编码均使用utf-8

  (客户端)数据的提交:

    php 通过CURL 发送http的post请求  http://www.cnblogs.com/wangyuman26/p/5545370.html

  (服务端)数据的接收:

     $data=file_get_contents("php://input");   //获取输入的数据流

     $jsonArray = json_decode($data, true);          //将获得的数据进行对象序列化,返回array

  (服务端)数据的返回:

    echo json_encode($array);


例一:

通过接口获取一篇文章。
接口需要传入文章的id,通过sql语句向数据库查询文章的内容,然后以json的格式echo出即可,
即:安卓或IOS工程师获取通过接口获取到了json格式的数据,在做进一步的处理,显示在手机上。

说明:开发语言为PHP,数据格式为Json,传输协议为http,提交数据为Get方式,字符编码均使用utf-8。

例二:

开发语言为PHP,数据格式为Json,传输协议为http,提交数据为Post方式,字符编码均使用utf-8。

说明:①设置接口接口返回值编码   header("Content-type:text/plain;charset=UTF-8");

     ②因为为Post方式提交数据,所以提交数据可以使用Json的格式,如:

data='{
    "serviceName": "login",
    "queryParameters": {
        "password": "123456",
        "mobile": "xxxxxxxxxx"
    }
}'  

IndexController.class.php
class IndexController extends Controller {
public function index(){
header("Content-type:text/plain;charset=UTF-8");
$index = new IndexService();
$array = $index->index();
echo json_encode($array);
}
} IndexService.class.php
class IndexService {
public function index(){
$array['status'] = 1;
$array['comment'] = '参数不全!';
try{
$data=file_get_contents("php://input"); //获取输入的数据流
$jsonArray = json_decode($data); //将获得的数据进行对象序列化。
$serviceName = $jsonArray->serviceName;
$param = $jsonArray->queryParameters;
/***********************************************************************************/
switch($serviceName){
case 'login':
$member = new MemberService();
$array = $member->login($param);
break;
case 'orderDetail':
$order = new OrderService();
$array = $order->orderDetail($param);
break;
          //……………………
}
/*************************************************************************************/
}catch (Exception $ex){
$array['status'] = 1;
$array['comment'] = '程序错误:'.$ex->getMessage();
}
return $array;
}
} OrderService.class.php
class OrderService { //订单详情。
public function orderDetail($param){
$orderId = $param->orderid;
$order = M('Order');
$map['id'] = $orderId+0;
$rs = $order->where($map)->find();
$array['status'] = 1;
$array['comment'] = '未查到数据!';
if($rs){
$rs['crosscity'] = $this->crossCity($rs['id']);
$array['status'] = 0;
$array['data'] = $rs;
$array['comment'] = '查询成功!';
}
return $array;
} }

接口说明文档(范文1):

开发者    版本    说明    日期       
XXX    1.0    原始开发    XXX     
                   
                   
               
说明
本接口供休息休息项目中Android+IOS上的APP调用,开发语言为PHP,数据格式为Json,传输协议为http,提交数据为Post方式,字符编码均使用utf-8。
接口地址
http://xxxxxx.com

一:获取用户资料 memberInfo

提交数据:
{
    "serviceName": "memberInfo",
    "queryParameters": {
        "userid": "xx"
    }
}

参数说明:
参数    必填    类型    说明       
serviceName    是    varchar    指令:memberInfo       
queryParameters    是    数组           
userid    是    int    会员id

返回数据:
{
    "status": "0",
    "comment": "成功获取个人信息",
    "responseParameters": {
        "id": "21",
        "companyid": "5"

………………
    }
}

参数说明 :
参数    类型    说明       
status    Int    返回状态:
0成功
1错误原因1

2错误原因2     
comment    Varchar    注释


项目中的总结:

1:接口的返回值中的数据,最好同意都是字符串类型,方便IOS和安卓开发人员的处理。

{
    "status": ,  //这个可以不是字符串
    "comment": "发送成功...",
    "data": {       //里面的最好都是字符串类型
        "id": "22",
        "verify-phone": "1316113129X",
        "verify-code": "644115"
    }
}

即:变量都为字符串类型,有引号包着。或者使用类型转换函数strval(),转换为字符串类型。

2:设置接口返回值的编码

  使用header函数
  在控制器或页面里面header("content-type:text/html; charset=utf-8");

3:安全性

  ①需要有一个加密规则

即每次请求接口,需要根据规则加密一段字符串,接口那边也根据规则加密一段字符串,判断与接收的字符串是否一致,如果一致允许本次的请求。

    规则比如可以是:md5(“项目简称”+“请求接口的名称”+“固定的几个字母”)

②接收的参数为整型时,要做强制转化为整型处理

③接收的参数为字符串时,要做处理

 4:要考虑低版本的兼容

-1、版本更新后,要考虑对低版本的功能是否有影响

        //版本升级:新添加的参数 (逻辑层需要新增参数,加默认值来兼容旧版本。)
$new_driverid = isset($param->new_driverid) ? intval($param->new_driverid) : -1;

app接口的简单案例 和一些总结的更多相关文章

  1. python——flask常见接口开发(简单案例)

    python——flask常见接口开发(简单案例)原创 大蛇王 发布于2019-01-24 11:34:06 阅读数 5208 收藏展开 版本:python3.5+ 模块:flask 目标:开发一个只 ...

  2. SpringBoot基础学习(一) SpringBoot概念、简单案例实现、单元测试及热部署讲解

    SpringBoot概念 Spring优缺点分析 Spring优点 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品,无需开发重量级的 ...

  3. APP接口版本兼容的问题

    现在基本每个公司都做APP,所以大家都面临 APP接口版本兼容的问题. iOS和android 要不断开发新版本,很多服务端开发都是在以前接口的逻辑上进行修改.新的APP和接口开发后,接口如何兼容老的 ...

  4. winform 通过 html 与swf 交互 简单案例

    在上一篇 winform 与 html 交互 简单案例 中讲了winform与html之间的简单交互,接下来的内容是在winform中以html为中转站,实现将swf嵌入winform中并实现交互. ...

  5. [Design Pattern] Observer Pattern 简单案例

    Observer Pattern,即观察者模式,当存在一对多关系,例如一个对象一有变动,就要自动通知被依赖的全部对象得场景,属于行为类的设计模式. 下面是一个观察者模式的简单案例. Observer ...

  6. [Design Pattern] Iterator Pattern 简单案例

    Iterator Pattern,即迭代时模式,按照顺序依次遍历集合内的每一个元素,而不用了解集合的底层实现,属于行为类的设计模式.为了方便理解记忆,我也会称其为遍历模式. 下面是一个迭代器模式的简单 ...

  7. [Design Pattern] Command Pattern 简单案例

    Command Pattern, 即命令模式,把一个命令包裹在一个对象里面,将命令对象传递给命令的执行方,属于行为类的设计模式 下面是命令模式的一个简单案例. Stock 代表被操作的对象.Order ...

  8. [Design Pattern] Proxy Pattern 简单案例

    Proxy Pattern, 即代理模式,用一个类代表另一个类的功能,用于隐藏.解耦真正提供功能的类,属于结构类的设计模式. 下面是 代理模式的一个简单案例. Image 定义接口,RealImage ...

  9. [Design Pattern] Flywight Pattern 简单案例

    Flywight Pattern, 即享元模式,用于减少对象的创建,降低内存的占用,属于结构类的设计模式.根据名字,我也将其会理解为 轻量模式. 下面是享元模式的一个简单案例. 享元模式,主要是重用已 ...

随机推荐

  1. js 身份验证

    var idCardNoUtil = {     provinceAndCitys: {11:"北京",12:"天津",13:"河北",14 ...

  2. C++之再续前缘(二)——类和对象(上)

    1.类的构成:数据和函数 public:可以由在类外由类的对象访问 private:只能由类内的成员函数访问 protected:可以由本类的成员函数访问,也可以由本类的派生类的成员函数访问 访问权限 ...

  3. my97日期控件

    http://www.seabroad.cn/cq/datepick/demo.htm 但是由于某些原因,担心这个网站不稳定,所以复制一下 一. 简介 1. 简介 目前的版本是:4.0 Prerele ...

  4. IIS如何设置可以让.aspx后缀的文件直接下载

    修改配置文件:<system.webServer> <staticContent> <remove fileExtension=".aspx" /&g ...

  5. C# winform窗体设计-对数据库执行增删改操作

    对于学习数据库的人来说,数据库的增删改可谓是最基本的了(小编其实也只是一个小白=-=),这篇文章,小编将于大家讲解数据库增删改操作 在执行数据库增删改的时候主要使用的:Command 类       ...

  6. C++自问自答

    1.为什么派生层次上的类,同一个虚函数在各个类的虚表中的位置一样?         因为:对虚函数的调用是通过虚指针+偏移地址构成,由于对虚函数的调用都是通过这种方式,所以对同一个虚函数的偏移值就必须 ...

  7. jpa findOne()用法

    findOne(Interger id) 如果实体类没有id这个属性的话是会报错的 改别人的代码神烦...

  8. 你所知道好玩有趣的 iOS URL schemes 有哪些?

    QQ的url是 mqq:// 微信是weixin:// 淘宝taobao:// 点评dianping:// dianping://search 微博 sinaweibo:// 名片全能王camcard ...

  9. Linux 吃掉我的内存

    在Windows下资源管理器查看内存使用的情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺的情况下使用交换分区,频繁地从磁盘上换入换出页会极大地影响系统的性能.而当我 ...

  10. iOS - Xcode7.3插件实效问题解决方法

    以往Xcode升级插件实效.1.关闭xcode 2.终端获取uid 3.文件中info.plist手动添加uid,现在不用了.在网上找的,特地记录一下,尤其是插件太多,不会麻烦了. 详细操作步骤: 关 ...