码迷,mamicode.com
首页 > Windows程序 > 详细

api 设计 多api一起访问

时间:2015-07-21 14:49:55      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

查看了下别的api的返回示例 我选出这样的返回样式
{
“resultcode”:”200”,
“reason”:”Successed!”,
“result”:{
“count”: 11,
“commentlist”: []
},
“notice”….
}
当前api访问的错误和原因加 非当前api的处理(比如notice 通知 注:来自开源中国ios版本的代码理解 他每个api都有可能有notice节点) 都跟result同级

很多时候(特别是app刚刚启动)经常会同时发起好几个api请求 于是乎我就想 能不能几个api同时请求呢我就使用php来做了个测试结果是可以做到的

<?php
namespace Home\Controller;
use Think\Controller;

use Home\Action\Article;
use Home\Action\Chapter;

class IndexController extends Controller {
    protected $response_data = array ();
    protected function response() {
        if (count ( $this->response_data ) > 0) {
            switch ($this->dtype) {
                case "xml" :
                    exit ( xml_encode ( $this->response_data ) );
                    break;
                default :
                    exit ( json_encode ( $this->response_data ) );
                    break;
            }
        }
    }

     public function index() {
        $actions = array();

        foreach ( $_GET  as $key => $action ) {
            $actions[$key] = $action;
        }
        foreach ( $_POST  as $key => $action ) {
            $actions[$key] = $action;
        }
        foreach ( $actions  as $key => $action ) {
            $action = json_decode($action,TRUE);
            $this->addResponseData($key,$action);
        }
        $this->response();
    }
    public function addResponseData($key,$action){
        $this->response_data[$key] = $this->handleAction($action);
    }

    /***
     * article_cover
    * 获取小说的图片
    * articleno
    */
    protected $accept_action_article_cover_key = "article_cover";
    /***
     * chapter_list
    * 获取小说章节list
    * articleno
    * page pagesize
    */
    protected $accept_action_chapter_list_key = "chapter_list";
    /***
     * article_list
    * 获取小说list
    * page pagesize
    */
    protected $accept_action_article_list_key = "article_list";
    /***
     * chapter
    * 获取某章节的内容
    * articleno chapterno(17110  或者 17110,17111)
    * dtype txt json xml
    */
    protected $accept_action_chapter_key = "chapter";
    /***
     * article
    * 获取小说详情
    * articleno
    * page pagesize
    */
    protected $accept_action_article_key = "article";

    public function handleAction($actionInfo){
        $action = $actionInfo["action"];
        $articleno = $actionInfo["articleno"];
        $chapterno = $actionInfo["chapterno"];
        switch ($action) {
            case $this->accept_action_article_cover_key :
                $Article = new Article ($actionInfo);
                $response_data =  $Article->ArticleCoverInfo ();
                break;
            case $this->accept_action_chapter_list_key :
                $Chapter = new Chapter($actionInfo);
                $chapter_list = $Chapter->getList( "articleno = " . $articleno );
                $response_data =  $chapter_list;
                break;
            case $this->accept_action_article_list_key :
                $Article = new Article($actionInfo);
                $response_data =   $Article->getlist();
                break;
            case $this->accept_action_chapter_key :
                $Chapter = new Chapter($actionInfo);
                $response_data =  $Chapter->getTxt($articleno, $chapterno);
                break;
            case $this->accept_action_article_key :
                $Article = new Article($actionInfo);
                $response_data =  $Article->getArticle();
                break;
            default :
                break;
        }
        return array($action=>$response_data);
    }
}

1、首先获取操作集合
从代码中可以看出是获取所有请求中的数据
每个key对应json格式的数据
json_decode($action,TRUE); 后面这个参数 是让解析的结果是数组而不是对象

2、然后针对每一个action做处理handleAction 此处处理中 就么法使用 get post来获取参数 了 我使用的是 在构造函数中 把参数传递进去 这样就可以把这个action只跟此处传递来的json有关系
后期可以加上一个user认证的json

<?php
namespace Home\Action;
use Home\Action\BaseAction;
class Article extends BaseAction{
    protected $articleno;
    //protected $file_base = "F:/yixuan_android/WWW/thinkphp_git/Public/article";
    protected $file_base = "d:/wwwroot/thinkphp_api/wwwroot/Public/article";
    protected $file_image_base = "/image/0/";
    public function __construct($info){
        parent::__construct($info);
        $this->table_name = "article";
        $this->articleno = $info["articleno"];
    }
    public function getArticle($articleno = -1){
        if ($articleno != -1) {
            $this->articleno = $articleno;
        }
        return $this->getModel()->find ( $this->articleno );
    }
    public function ArticleList(){
        return $this->getList();
    }
    public function SaveCover(){
        //保存base64字符串为图片
        //匹配出图片的格式
        $base64_image_content = $_POST["base64_image_content"];
        if (preg_match(‘/^(data:\s*image\/(\w+);base64,)/‘, $base64_image_content, $result)){
            $type = $result[2];
            $new_file = "./test.{$type}";
            if (file_put_contents($new_file, base64_decode(str_replace($result[1], ‘‘, $base64_image_content)))){
                echo ‘新文件保存成功:‘, $new_file;
            }
        }
    }
    public function ArticleCoverInfo(){
        $image_file = $this->ArticleCoverFile();
        $image_info = getimagesize($image_file);
        $base64_image_content = array();
        $base64_image_content[image_info] =$image_info;
        $base64_image_content[base64_contents] = chunk_split(base64_encode(file_get_contents($image_file)));
        return $base64_image_content;
    }
    public function ArticleCoverFile() {
        return  $this->file_base . $this->file_image_base . "/" . $this->articleno . "/" . $this->articleno . "s" . ".jpg";
    }
    public function ArticleCover() {
        $file = $this->ArticleCoverFile();
        if (file_exists ( $file )) {
            return file_get_contents ( $file );
        } else {
            return "封面不存在";
        }
    }
}

此图中专门让小说章节丢失为的是能展示完整
技术分享

以前的请求方式两个请求分别是
…?action=chapter&chapterno=17110,17111
…?action=article_list

版权声明:本文为博主原创文章,未经博主允许不得转载。

api 设计 多api一起访问

标签:

原文地址:http://blog.csdn.net/ydc__/article/details/46984647

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!