原文地址:http://www.terrysco.com/node/drupal-as-mobile-backend.html

用Drupal很容易实现一个API,让手机平台或者其他系统使用json的格式进行通信。

<?php
define('API_ERRORNO_INVALID_ACTION', 1);
define('API_ERRORNO_INVALID_PARAM', 2);
define('API_ERRORNO_NO_RECORD', 3);
define('API_ERRORNO_INVALID_NAME', 4);
define('API_ERRORNO_USER_BLOCKED', 5);
define('API_ERRORNO_LOGIN_FAILED', 6); // 根据错误代码返回错误信息
function api_message_wrapper($errno) {
$message = array(
API_ERRORNO_INVALID_ACTION =&gt; '非法的请求动作',
API_ERRORNO_INVALID_PARAM =&gt; '非法的请求参数',
API_ERRORNO_NO_RECORD =&gt; '查找不到数据',
API_ERRORNO_INVALID_NAME =&gt; '非法的手机号码',
API_ERRORNO_USER_BLOCKED =&gt; '当前用户已经被禁用',
API_ERRORNO_LOGIN_FAILED =&gt; '登陆失败',
);
return isset($message[$errno]) ? $message[$errno] : '未知的错误';
} // 验证合法的action
function api_action_route($action) {
$valid_actions = array(
'login' => 'login',
'register' => 'register',
'getCardInfos' => 'get_card_info',
);
return isset($valid_actions[$action]) ? $valid_actions[$action] : false;
} function api_menu() {
$items['api'] = array(
'page callback' => 'api_dispatch',
'access callback' => TRUE,
//'access arguments' => array('使用API'),
'type' => MENU_CALLBACK,
'file' => 'api.functions.inc',
);
return $items;
} // 成功返回
function api_response_sucess($data) {
drupal_json(array('ERRNO' => 0, 'DATA' => $data));
} // 失败返回
function api_response_error($errno) {
if ($errno && is_numeric($errno)) {
drupal_json(array(
'ERRNO' => $errno,
'MSG' => api_message_wrapper($errno),
));
}
} // API调度入口
function api_dispatch() {
if (!isset($_POST['ACTION']) || !api_action_route($_POST['ACTION'])) {
api_response_error(API_ERRORNO_INVALID_ACTION);
}
elseif (!isset($_POST['PARAM'])) {
api_response_error(API_ERRORNO_INVALID_PARAM);
}
else {
$param = json_decode($_POST['PARAM']);
call_user_func('api_call_'. api_action_route($_POST['ACTION']), $param);
}
}

适用方法:
http://localhost/drupal/index.php?q=api
http://localhost/drupal/api

用Drupal快速实现mobile平台服务端【转】的更多相关文章

  1. 快速理解高性能HTTP服务端的负载均衡技术原理(转)

    1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...

  2. 推荐:让你快速搞定各服务端(api,pc,mobile,wechat)代码

    如果你在写服务端 (PHP) ,会因为项目须求(做app.pc.mobiel.微信) 而写几套代码的,你不觉得很累吗? 现在的很多开源框架商用版本在做程序方面都是这么一套一套的,维护起来,二开起来特别 ...

  3. docker-compose 快速部署Prometheus之服务端并监控ceph cluster 使用钉钉webhook 报警

    现在环境是这样: ceph 4台: 192.168.100.21  ceph-node1 192.168.100.22  ceph-node2 192.168.100.23  ceph-node3 1 ...

  4. 基于supersocket、C#对JT808协议进行解析构建gps监控平台服务端

    GPS监控平台.车联网.物联网系统中GPRS网络数据的并发通讯和处理解析,主要功能有socket的UDP和TCP链路建立和维持,网络数据协议包接收与解析,分发上传到其他业务规则服务器,在物联网以及位置 ...

  5. 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)

    本文由“yuanrw”分享,博客:juejin.im/user/5cefab8451882510eb758606,收录时内容有改动和修订. 0.引言 站长提示:本文适合IM新手阅读,但最好有一定的网络 ...

  6. Netty源码分析之服务端启动过程

    一.首先来看一段服务端的示例代码: public class NettyTestServer { public void bind(int port) throws Exception{ EventL ...

  7. 基于 xorm 的服务端框架 XGoServer

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  8. React 16 服务端渲染的新特性

    React 16 服务端渲染的新特性 React 16 中关于服务端渲染的新特性 快速介绍React 16 服务端渲染的新特性,包括数组.性能.流等 React 16 终于来了!

  9. win7设置docker默认服务端地址

    目录 win7设置docker默认服务端地址 1.开启docker远程访问 2.本地调整 2.1 docker.exe重命名 2.2 添加docker.bat 2.3 添加快速切换功能 3.使用验证 ...

随机推荐

  1. 【转】代码混淆和apk反编译

    代码混淆 http://blog.csdn.net/vipzjyno1/article/details/21042823 apk反编译 http://blog.csdn.net/vipzjyno1/a ...

  2. mvc 从客户端 中检测到有潜在危险的 Request.Form 值

    天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:从客户端(Content="<EM ><STRONG ><U >这是测试这...&qu ...

  3. python开发_count()

    python中的count()函数,从字面上可以知道,他具有统计功能 下面来看看具体的demo: 功能:读取一个文件'c:\\test.txt',统计出该文件中出现字符'a'的次数 #python o ...

  4. uoj 66 新年的巧克力棒 数学

    #66. 新年的巧克力棒 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/66 Description 马上就要 ...

  5. MAC 更新SVN到1.8

    经过谷歌和百度N次后,最终搞定SVN的升级,Intellij Idea和Xcode5.1都能够正常使用. 步骤: 1. 下载Subverion的Max安装版.(推荐.使用其它brew和port都试过, ...

  6. iptables学习与研究(使用LOG记录失败日志)

    原文地址: http://blog.csdn.net/fafa211/article/details/2307581 通常情况下,iptables的默认政策为DROP,不匹配的数据包将被直接丢弃.但在 ...

  7. Ext各种对话框

    <HTML> <HEAD> <TITLE>选择确认对话框</TITLE> <link rel="stylesheet" typ ...

  8. client怎样调用IBinder接口对象

    代码: public void funclick(View view){ Intent _intent = new Intent(MainActivity.this,MyService.class); ...

  9. mysql重启,重启释放ibtmp1

    1.通过rpm包安装的MySQL service mysqld restart 2.从源码包安装的MySQL // linux关闭MySQL的命令$mysql_dir/bin/mysqladmin - ...

  10. python的__slots__节约内存的魔法;检查python每一行代码内存占用情况的工具

    在Python中,每个类都有实例属性.默认情况下Python用一个字典来保存一个对象的实例属性.这非常有用,因为它允许我们在运行时去设置任意的新属性. 然而,对于有着已知属性的小类来说,它可能是个瓶颈 ...