ctechhindi/codeigniter-api

CodeIgniter API 控制器

dev-master 2019-12-08 13:52 UTC

This package is not auto-updated.

Last update: 2024-09-19 17:34:19 UTC


README

此扩展由 Jeevan Lal 提供支持。

文件

API 文档

  • \application\libraries\API_Controller.php
  • \application\helpers\api_helper.php
  • \application\config\api.php

令牌文档

  • \application\libraries\Authorization_Token.php
  • \application\config\jwt.php
  • PHP-JWT\application\third_party\php-jwt\

安装

您可以使用 composer 将此项目安装到您的计算机上。

安装 composer 包的推荐方法是

composer require ctechhindi/codeigniter-api:dev-master --prefer-source

要求

  1. PHP 5.4 或更高版本
  2. CodeIgniter 3.0+

注意:库在 CodeIgniter v3.8 和 PHP 5.6.8 中使用。

DEMO

http://codeigniter-api.speedtyping.in/api/user/login

简单 API

header("Access-Control-Allow-Origin: *");

// API Configuration
$this->_apiConfig([
    /**
     * By Default Request Method `GET`
     */
    'methods' => ['POST'], // 'GET', 'OPTIONS'

    /**
     * Number limit, type limit, time limit (last minute)
     */
    'limit' => [5, 'ip', 'everyday'],

    /**
     * type :: ['header', 'get', 'post']
     * key  :: ['table : Check Key in Database', 'key']
     */
    'key' => ['POST', 'string_key' ], // type, {key}|table (by default)
]);

// return data
$this->api_return(
    [
        'status' => true,
        "result" => "Return API Response",
    ],
200);

文档

设置 API 请求方法

  • 此函数默认请求方法为 GET
$this->_APIConfig();
  • 设置 API 请求 方法 POST, GET, ..
$this->_APIConfig([
    'methods' => ['POST', 'GET'],
]);

使用 API 限制

在使用 API 限制之前,我们需要加载 codeigniter 的 数据库库。您也可以在 config/autoload.php 配置文件中加载数据库库。

在加载数据库库后,必须在数据库配置文件 config/database.php 中设置数据库。

在创建和设置数据库后,我们需要在数据库中创建一个名为 [api_limit] 的 API 限制表。如下所示。

CREATE TABLE `api_limit` (
    `id` INT NOT NULL AUTO_INCREMENT ,  
    `user_id` INT NULL DEFAULT NULL ,  
    `uri` VARCHAR(200) NOT NULL ,  
    `class` VARCHAR(200) NOT NULL ,  
    `method` VARCHAR(200) NOT NULL ,  
    `ip_address` VARCHAR(50) NOT NULL ,  
    `time` TEXT NOT NULL ,    PRIMARY KEY  (`id`)
) ENGINE = InnoDB;

API 限制的数据库表名称默认为 api_limit。我们可以通过 API 配置文件 [config/api.php] 来更改它。如下所示。

/**
 * API Limit database table name
 */
$config['api_limit_table_name'] = 'api_limit';

/**
 * Set API Timezone 
 */
$config['api_timezone'] = 'Asia/Kolkata';

现在我们可以使用 API 限制方法。

因此,此 API 在 5 分钟内只能运行 10 次。它是基于 IP 地址

/**
 * API Limit
 * ----------------------------------
 * @param: {int} API limit Number
 * @param: {string} API limit Type (IP)
 * @param: {int} API limit Time [minute]
 */

$this->_APIConfig([
    // number limit, type limit, time limit (last minute)
    'limit' => [10, 'ip', 5] 
]);

在 API 限制的 时间参数 中,我们也可以使用 每天,这将遵循每天相同的 API 限制。在相同的 API 地址上

/**
 * API Limit
 * ----------------------------------
 * @param: {int} API limit Number
 * @param: {string} API limit Type (IP)
 * @param: {string} API limit [everyday]
 */

$this->_APIConfig([
    // number limit, type limit, everyday
    'limit' => [10, 'ip', 'everyday'] 
]);

不使用数据库使用 API 密钥

我们可以在请求头中设置 API 密钥。默认情况下,头名称为 X-API-K,我们可以在 API 配置文件 [config/api.php] 中更改它。如下所示

/**
 * API Key Header Name
 */
$config['api_key_header_name'] = 'X-API-KEY';

在您的 API 控制器文件中使用此代码。

/**
 * Use API Key without Database
 * ---------------------------------------------------------
 * @param: {string} Types
 * @param: {string} API Key
 */

$this->_APIConfig([
    'key' => ['header', 'Set API Key'],
]);

使用数据库使用 API 密钥

我们还可以通过 数据库 来检查 API 密钥。为此,我们首先需要在 MySQL 中创建 api_keys 表。如下所示。

CREATE TABLE `api_keys` ( 
    `id` INT NOT NULL AUTO_INCREMENT ,  
    `api_key` VARCHAR(50) NOT NULL ,  
    `controller` VARCHAR(50) NOT NULL ,  
    `date_created` DATE NULL DEFAULT NULL ,  
    `date_modified` DATE NULL DEFAULT NULL ,    PRIMARY KEY  (`id`)
) ENGINE = InnoDB;

API 密钥的数据库表名称默认为 api_keys。我们可以通过 API 配置文件 [config/api.php] 来更改它。如下所示。

/**
 * API Keys Database Table Name 
 */
$config['api_keys_table_name'] = 'api_keys';

api_keys 数据库表中设置 API 密钥,并在您的 API 控制器文件中使用此代码。

/**
 * API Key
 * ---------------------------------------------------------
 * @param: {string} Types
 * @param: {string} [table]
 */
$this->_APIConfig([
    // 'key' => ['header', 'table'],
    'key' => ['header'], 
]);

在 API 密钥中使用自定义函数

/**
 * API Key
 * ---------------------------------------------------------
 * @param: {string} Types
 * @param: [function] return api key
 */
$this->_APIConfig([
    'key' => ['header', $this->key() ],
]);

// This is Custom function and return api key
private function key() {
    return 1452;
}

在 API 响应中添加自定义数据

在 API 的响应中,我们还可以添加类似这样的自定义数据。

$this->_APIConfig([
    'key' => ['header'],
    'data' => [ 'is_login' => false ] // custom data
]);

API 输出 :

{
    "status": false,
    "error": "API Key Header Required",
    "is_login": false
}

API 返回数据

此方法用于将数据返回给 api,其中响应数据是 firstsecond 请求状态码。

/**
 * Return API Response
 * ---------------------------------------------------------
 * @param: API Data
 * @param: Request Status Code
 */
$this->api_return(data, status_code);

请求状态码列表

在 API 密钥中使用配置文件

  1. 创建配置文件 \application\config\api_keys.php
  2. 在 API 控制器中如下使用
// load API Keys config file
$this->load->config('api_keys');

$this->_APIConfig([
    'key' => ['post', $this->config->item('controller/api key name')],
]);

问题报告

如果您对此插件有问题或发现任何错误,请在 GitHub 上提交问题。

许可

CodeIgniter API 控制器受 MIT 许可。