该软件包已被废弃,不再维护。未建议替代软件包。

PHP、JSON 和 Mongo API 框架

dev-master 2016-01-23 06:15 UTC

This package is not auto-updated.

Last update: 2020-02-21 17:01:18 UTC


README

Fast 是一个 PHP 5.4+ API 微框架,用于构建 API。使用 Fast::get()、Fast::post() 等方法构建您的 API。Fast 遵循特定的观点,并构建为输出 JSON 响应、通过 JSON Web Tokens (JWT) 进行身份验证以及与 MongoDB 交互以构建 Fast API。

安装

如果您尚未安装,首先应安装 composer。

将以下内容添加到您的 composer.json 文件中,然后从命令行运行 composer install。

"require": {
	"kheitzman/fast": "dev-master"
}

用法

假设您正在使用 index.php 文件来路由请求,请将以下内容添加到您的 index 文件的顶部。

require 'vendor/autoload.php';
use FastPHP\Fast as Fast;

这将以别名 Fast 为 Fast 使用 composer 的自动加载功能,以方便使用。

Fast 根据您指定的中间件和路由构建了一个堆栈。中间件可以放置在堆栈中的不同位置。默认情况下,所有中间件都放置在位置 0。当找到路由时,它被放置在堆栈中的位置 20。要运行在路由代码之前运行的中间件,请指定小于 20 的位置。要使中间件在路由之后运行,请指定大于 20 的位置。您可以使用 $appConfig 修改默认路由位置。

配置

使用 Fast::init() 自定义 JSON 响应、数据库连接等。以下列出了每个配置变量的示例。

// Server information
$config['server']['name'] = 'Fast API Server';
$config['server']['description'] = 'Provides JSON responses to API endpoints via MongoDB.';
$config['server']['version'] = '1.0';

// Setup the environment
$config['environment'] = 'development';

// enable benchmark
$config['benchmark'] = false;

// default route position
$config['route_position'] = 20;

// database settings
$config['mongo']['host'] = 'localhost';
$config['mongo']['port'] = 27017;
$config['mongo']['name'] = 'fast';

// jwt key
$config['jwt']['key'] = null;
$config['jwt']['time_valid'] = 60; // 60*60*24*30; // 30 days

// logging
$config['logging'] = false;

Fast::init( $config );

GET 示例

Fast::get('/', function() {
	// by default returns server information
});

Fast::get('entries', function() {
	$data['entries'] = Entry::get_all();
	return $data;
});

Fast::get('entry/:id', function($id) {
	$data['entry'] = array(
		'title' => 'Lorem Ipsum ' . $id ,
		'content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.
		Mauris lorem ante, semper et lacus non, viverra iaculis velit. Fusce id
		lorem massa. Pellentesque placerat ligula eu faucibus suscipit. Proin mi
		erat, aliquet et mi in, maximus varius augue. Nullam elementum mauris justo,
		eget tempor purus tristique quis. Aenean vel turpis quis orci ultrices
		iaculis. Maecenas lacinia consequat massa blandit rutrum. Phasellus non
		libero tempor nunc gravida eleifend. Nam et nulla nunc. Curabitur eget nulla
		aliquet justo interdum pretium id ac tortor.',
		'author' => 'Kaleb Heitzman'
	);
	return $data;
});

POST 示例

Fast::post('entry', function() {
	$data['success'] = 'Entry saved successfully.';
	return $data;
});

PUT 示例

Fast::put('entry/:id', function($id) {
	$data['success'] = 'Entry updated successfully.';
	return $data;
});

DELETE 示例

Fast::delete('entry/:id', function($id) {
	$data['success'] = 'Entry deleted successfully.';
	return $data;
});

OPTIONS 示例

Fast::options('entries', function() {
	$data['allow'] = 'HEAD,GET,POST,PUT,DELETE,OPTIONS';
	return $data;
});

中间件

您可以在每个请求和响应之前和之后添加中间件。中间件的默认位置是 0。您可以通过指定闭包的最后一个参数中的位置来更改此位置。您可以看到我们指定了 notify 并在堆栈中指定了位置 50。

Fast::middleware('authenticate', function() {
	$data['auth'] = array(
		'authenticated' = true,
		'token' = 1234567890
	);
	return $data;
}, 0);

Fast::middleware('notify', function() {
	$data['notify'] array(
		'mailchimp_synced' = true,
	);
	return $data;
}, 50);

Fast::post('article', 'authenticate', function() {
	// ex., code to update an article in your db.
});

Fast::get('cron', 'notify', function() {
	// ex., code to notify someone that cron has run.
});

JSON 响应

Fast 输出包含服务器信息、速度基准测试和您在中间件和路由闭包中返回的自定义数据的 JSON 响应。您必须在每个闭包中指定一个键(例如,$data['entry']),并返回 $data,以便在 JSON 响应中显示您的自定义内容。以下是根据上面的 GET /entry/:id 示例的示例。

{
	server: {
		name: "Fast API Server",
		description: "Provides JSON data responses.",
		version: "1.0"
	},
	auth: {
		authenticated: true,
		token: "98yq34rnasdifg7gasd7vehlk1zf09v3"
	},
	entry: {
		title: "Lorem Ipsum 1",
		content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris
		lorem ante, semper et lacus non, viverra iaculis velit. Fusce id lorem
		massa. Pellentesque placerat ligula eu faucibus suscipit. Proin mi erat,
		aliquet et mi in, maximus varius augue. Nullam elementum mauris justo,
		eget tempor purus tristique quis. Aenean vel turpis quis orci ultrices
		iaculis. Maecenas lacinia consequat massa blandit rutrum. Phasellus non
		libero tempor nunc gravida eleifend. Nam et nulla nunc. Curabitur eget
		nulla aliquet justo interdum pretium id ac tortor.",
		author: "John Doe"
	},
	benchmark: {
		start: 1453270614.2401,
		end: 1453270614.2403,
		execution_time: "0.00018 seconds"
	}
}