0

0

restfule 接口

PHP中文网

PHP中文网

发布时间:2016-05-26 08:18:30

|

1117人浏览过

|

来源于php中文网

原创

restfule 接口
适用的平台:跨平台
所依赖:curl扩展

ApiServer.php

authorization();
 
        $this->method = strtolower($_SERVER['REQUEST_METHOD']);
 
        //所有的请求都是pathinfo模式
        $pathinfo = $_SERVER['PATH_INFO'];
 
        //将pathinfo数据信息映射为实际请求方法
        $this->getResourse($pathinfo);
 
        //获取传输的具体参数
        $this->getData();
 
        //执行响应
        $this->doResponse();
    }
 
    /**
     * 根据不同的请求方式,获取数据
     * @return [type]
     */
    private function doResponse(){
        switch ($this->method) {
            case 'get':
                $this->_get();
                break;
            case 'post':
                $this->_post();
                break;
            case 'delete':
                $this->_delete();
                break;
            case 'put':
                $this->_put();
                break;
            default:
                $this->_get();
                break;
        }
    }
 
    // 将pathinfo数据信息映射为实际请求方法
    private function getResourse($pathinfo){
 
        /**
         * 将pathinfo数据信息映射为实际请求方法
         * GET /users: 逐页列出所有用户;
         * POST /users: 创建一个新用户;
         * GET /users/123: 返回用户为123的详细信息;
         * PUT /users/123: 更新用户123;
         * DELETE /users/123: 删除用户123;
         *
         * 根据以上规则,将pathinfo第一个参数映射为需要操作的数据表,
         * 第二个参数映射为操作的id
         */
         
        $info = explode('/', ltrim($pathinfo, '/'));
        list($this->resourse, $this->resourseId) = $info;
    }
 
    /**
     * 验证请求
     */
    private function authorization(){
        $token = $_SERVER['HTTP_CLIENT_TOKEN'];
        $authorization = md5(substr(md5($token), 8, 24).$token);
        if($authorization != $_SERVER['HTTP_CLIENT_CODE']){
            //验证失败,输出错误信息给客户端
            $this->outPut($status = 1);
        }
    }
 
    /**
     * [getData 获取传送的参数信息]
     * @param  [type] $pad [description]
     * @return [type]      [description]
     */
    private function getData(){
        //所有的参数都是get传参
        $this->param = $_GET;
    }
 
    /**
     * 获取资源操作
     * @return [type] [description]
     */
    protected function _get(){
        //逻辑代码根据自己实际项目需要实现
    }   
 
    /**
     * 新增资源操作
     * @return [type] [description]
     */
    protected function _post(){
        //逻辑代码根据自己实际项目需要实现
    }
 
    /**
     * 删除资源操作
     * @return [type] [description]
     */
    protected function _delete(){
        //逻辑代码根据自己实际项目需要实现
    }
 
    /**
     * 更新资源操作
     * @return [type] [description]
     */
    protected function _put(){
        //逻辑代码根据自己实际项目需要实现
    }
 
    /**
     * 出入服务端返回的数据信息 json格式
     */
    public function outPut($stat, $data=array()){
        $status = array(
            //0 状态表示请求成功
            0 => array(
                'code' => 1,
                'info' => '请求成功',
                'data' =>$data
            ),
            //验证失败
            1 => array(
                'code' => 0,
                'info' => '请求不合法'
            )
        );
 
        try{
            if(!in_array($stat, array_keys($status))){
                throw new Exception('输入的状态码不合法');
            }else{
                echo json_encode($status[$stat]);
            }
        }catch (Exception $e){
            die($e->getMessage());
        }
    }
}

ApiClient.php

requestType = strtolower($requestType);
        $paramUrl = '';
        // PATHINFO模式
        if (!empty($data)) {
            foreach ($data as $key => $value) {
                $paramUrl.=  $key . '=' . $value.'&';
            }
            $url = $url .'?'. $paramUrl;
        }
         
        //初始化类中的数据
        $this->url = $url;
         
        $this->data = $data;
        try{
            if(!$this->curl = curl_init()){
                throw new Exception('curl初始化错误:');
            };
        }catch (Exception $e){
            echo '
';
            print_r($e->getMessage());
            echo '
';         }           curl_setopt($this->curl, CURLOPT_URL, $this->url);         curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);       }           /**      * [_post 设置get请求的参数]      * @return [type] [description]      */     public function _get() {       }           /**      * [_post 设置post请求的参数]      * post 新增资源      * @return [type] [description]      */     public function _post() {           curl_setopt($this->curl, CURLOPT_POST, 1);           curl_setopt($this->curl, CURLOPT_POSTFIELDS, $this->data);               }           /**      * [_put 设置put请求]      * put 更新资源      * @return [type] [description]      */     public function _put() {                   curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'PUT');     }           /**      * [_delete 删除资源]      * delete 删除资源      * @return [type] [description]      */     public function _delete() {         curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'DELETE');       }           /**      * [doRequest 执行发送请求]      * @return [type] [description]      */     public function doRequest() {         //发送给服务端验证信息         if((null !== self::token) && self::token){             $this->headers = array(                 'Client_Token: '.self::token,                 'Client_Code: '.$this->setAuthorization()             );         }           //发送头部信息         $this->setHeader();           //发送请求方式         switch ($this->requestType) {             case 'post':                 $this->_post();                 break;               case 'put':                 $this->_put();                 break;               case 'delete':                 $this->_delete();                 break;               default:                 curl_setopt($this->curl, CURLOPT_HTTPGET, TRUE);                 break;         }         //执行curl请求         $info = curl_exec($this->curl);           //获取curl执行状态信息         $this->status = $this->getInfo();         return $info;     }       /**      * 设置发送的头部信息      */     private function setHeader(){         curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->headers);     }       /**      * 生成授权码      * @return string 授权码      */     private function setAuthorization(){         $authorization = md5(substr(md5(self::token), 8, 24).self::token);         return $authorization;     }     /**      * 获取curl中的状态信息      */     public function getInfo(){         return curl_getinfo($this->curl);     }       /**      * 关闭curl连接      */     public function __destruct(){         curl_close($this->curl);     } }

testClient.php

jQuery新浪微博接口图片上传源代码
jQuery新浪微博接口图片上传源代码

jQuery新浪微博接口图片上传源代码

下载
 'anziguoer',
    'passwd' => 'yangyulong'
);
// $url = 'http://localhost/restAPI/restServer.php';
$url = 'http://localhost/restAPI/testServer.php/user/123';
 
$rest = new restClient($url, $arr, 'get');
$info = $rest->doRequest();
 
//获取curl中的状态信息
$status  = $rest->status;
echo '
';
print_r($info);
echo '
';

testServer.php

obj = $obj;
        //$this->resourse; 父类中已经实现,此类中可以直接使用
        //$tihs->resourseId; 父类中已经实现,此类中可以直接使用
    }
     
    /**
     * 获取资源操作
     * @return [type] [description]
     */
    protected function _get(){
        echo "get";
        //逻辑代码根据自己实际项目需要实现
    }   
 
    /**
     * 新增资源操作
     * @return [type] [description]
     */
    protected function _post(){
        echo "post";
        //逻辑代码根据自己实际项目需要实现
    }
 
    /**
     * 删除资源操作
     * @return [type] [description]
     */
    protected function _delete(){
        //逻辑代码根据自己实际项目需要实现
    }
 
    /**
     * 更新资源操作
     * @return [type] [description]
     */
    protected function _put(){
        echo "put";
        //逻辑代码根据自己实际项目需要实现
    }
}
 
$server = new testServer();

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.06

java多线程方法汇总
java多线程方法汇总

本专题整合了java多线程面试题、实现函数、执行并发相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.06

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

90

2026.02.06

快手网页版入口与电脑端使用指南 快手官方短视频观看入口
快手网页版入口与电脑端使用指南 快手官方短视频观看入口

本专题汇总了快手网页版的最新入口地址和电脑版使用方法,详细提供快手官网直接访问链接、网页端操作教程,以及如何无需下载安装直接观看短视频的方式,帮助用户轻松浏览和观看快手短视频内容。

15

2026.02.06

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

10

2026.02.06

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

6

2026.02.06

JavaScript 异步编程与事件驱动架构
JavaScript 异步编程与事件驱动架构

本专题深入讲解 JavaScript 异步编程与事件驱动架构,涵盖 Promise、async/await、事件循环机制、回调函数、任务队列与微任务队列、以及如何设计高效的异步应用架构。通过多个实际示例,帮助开发者掌握 如何处理复杂异步操作,并利用事件驱动设计模式构建高效、响应式应用。

7

2026.02.06

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

25

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

28

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
微信小程序开发之API篇
微信小程序开发之API篇

共15课时 | 1.3万人学习

Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号