tempest-tools / tempest-tools-skeleton
基于:mitchdav/laravel-versioned-api。这个分支是为了创建API的一站式解决方案而设计的。它利用了许多其他第三方库和其他tempest工具组件。
Requires
- php: >=7.1.0
- ageras/laravel-onesky: ^0.8.0
- beberlei/doctrineextensions: ^1.0
- behat/transliterator: ^1.2
- dingo/api: 1.0.x@dev
- laravel-doctrine/acl: 1.0.*
- laravel-doctrine/extensions: 1.0.*
- laravel-doctrine/migrations: 1.0.*
- laravel-doctrine/orm: 1.2.*
- laravel/framework: 5.3.*
- laravel/socialite: ~2.0
- predis/predis: ^1.1
- propaganistas/laravel-phone: ^4.0
- ramsey/uuid-doctrine: ^1.4
- tymon/jwt-auth: 0.5.*
Requires (Dev)
- fzaninotto/faker: ~1.4
- mockery/mockery: 0.9.*
- phpunit/phpunit: ~4.0
- symfony/css-selector: 2.8.*|3.0.*
- symfony/dom-crawler: 2.8.*|3.0.*
- v2.0.4.x-dev
- 2.0.4
- v2.0.3.x-dev
- 2.0.3
- v2.0.2.x-dev
- 2.0.2
- v2.0.1.x-dev
- 2.0.1
- v2.0.0.x-dev
- 2.0.0
- v1.0.1.x-dev
- 1.0.1
- v1.0.0.x-dev
- 1.0.0
- 0.2.0
- 0.1.2
- 0.1.1
- 0.1.0
- dev-v2.0.4-vanilla
- dev-develop
- dev-jerazo-feature-coping-up-opensoure-features
- dev-jerazo-rc-vanilla-v2.0.4
- dev-jerazo-bugfix-stabilization-unit-test
- dev-feature-cleanup-jerazo-opensource-update
- dev-jerazo-feature-#154751264-email-translation
- dev-jerazo-bugfix-#159390713-route-fix
- dev-jerazo-feature-#157450269-prevent-brute-force-account-infiltration
- dev-jerazo-feature-#157450243-password-verification-regex
- dev-wferrer-bug-#158041930-Error_Building_Backend
- dev-v2.0.3-vanilla
- dev-v2.0.2-vanilla
- dev-v2.0.1-vanilla
- dev-2.0.0-vanilla
This package is not auto-updated.
Last update: 2024-09-23 22:03:47 UTC
README
这是一个我正在制作的骨架,它将包含所有常见网络应用程序所需的功能,以及一套用于更快、更安全、更广泛地构建API的工具,比我所遇到的任何其他项目都要好。
在过去的近15年里,我一直在制作网络应用程序,我遇到了许多编写糟糕的项目。我用这段时间收集了我认为理想项目应该是什么样子的笔记,并思考了创建一个工具集的最佳方式,以编写满足以下要求的API:
- 尽可能快地设置和配置
- 安全
- 灵活且可扩展,足以允许API的核心代码轻松适应任何场景
- 使用和理解上保持一致。
我也一直想知道为什么有这么多特性是99%的网络应用程序所必需的,但仍然没有一种方法可以开始一个项目,这些特性已经编写并协同工作。
我的目标是让Tempest Tools和这个骨架成为对这些需求的回答;这是新Laravel项目的理想起点。我正在制作的骨架将包含所有常见网络应用程序所需的功能,以及一套用于更快、更安全、更广泛地构建API的工具。
随着新工具被添加到骨架中,我将它们连接起来。因此,这个骨架将作为所有包含工具的工作示例,并且是任何新Laravel项目的完美起点。
这个骨架还包含了其他Tempest Tools包的测试用例。
Tempest Tools Skeleton仍在开发中,所以如果您遇到问题,请报告它,并/或发送一个拉取请求以修复问题。
请注意,包文件夹包含第一方组件。
Tempest Tools Skeleton是Laravel版本化API的分支。请参阅:https://github.com/mitchdav/laravel-versioned-api
当前v2.0.4中包含的内容(第一方)
- 包含其他Tempest Tools包使用的通用库。
- 包含易于配置的中间件,可以将它们应用于任何路由,根据允许开发者轻松定义哪些权限(存储在数据库中)的模板系统来限制对其的访问。
- 包含易于配置基于事件的通信和实时警报的工具。
- 编写RESTful API最快、最安全、最可扩展的方式。
- 注册/用户电子邮件验证。
- 从第三方服务(Google、Facebook、Twitter)进行OAuth登录。
- 改进的本地化功能。
- 用户管理系统。
当前v2.0.4中包含的内容(第三方)
- laravel-versioned-api提供的所有内容
- https://packagist.org.cn/packages/laravel-doctrine/extensions
- https://packagist.org.cn/packages/gedmo/doctrine-extensions
- https://packagist.org.cn/packages/beberlei/DoctrineExtensions
- https://packagist.org.cn/packages/laravel-doctrine/migrations
- https://packagist.org.cn/packages/laravel-doctrine/acl
当前正在开发中
- Tempest Tools 缓存标签系统
- 根据 Tempest Tools Common ArrayHelper 的模板系统对缓存项进行标签化。将标签应用于不支持标签的分布式缓存环境。
计划事项
- 改进错误处理和日志记录。
- 支持代码模块化。
- 更好地实现 Gedmo 扩展(将扩展应用于提供的实体)。
- 全文搜索。
- 结果缓存。
- 大数据集的数据库分片。
需求
- PHP >= 7.1.0
- Composer
- laravel/framework 5.3.*
- laravel-doctrine/orm 1.2.*,
- 缓存系统(Redis、Memcached、文件缓存)
- 数据库(MySQL 或 Laravel 和 Doctrine 支持的其他数据库)
安装
您可以先分叉仓库,然后更新下面的 git clone 命令。或者,您可以可选地将克隆的仓库保存到您自己的仓库中。
注意:在运行 composer install 之前,请确保关闭 xdebug,因为它可能会导致它无限期地挂起(设置 xdebug: "xdebug.remote_autostart=0" 应该解决这个问题)。通过在终端运行以下命令手动克隆仓库。我们进行手动克隆,以便运行子模块命令。
git clone https://github.com/tempestwf/tempest-tools-skeleton {name of directory to clone into}
cd {name of directory to clone into}
git submodule init
git submodule update
composer install
php -r "copy('.env.example', '.env');"
php artisan key:generate
php artisan jwt:generate
如果您想要一个不包含专辑和艺术家以及相关测试的纯实现,您可以将分支切换到 vanilla。
git checkout 2.0.2-vanilla
在 .env 中为您的 API 命名
API_NAME="{API Name}"
在 .env 文件中设置您的附加信息。请记住,在测试之前,您还必须在系统上设置主机。
APP_URL=http://{site url}
API_DOMAIN={domain}
此外,在 .env 文件中,您必须设置一个基本用户。此用户将被添加到 DB 中,并且需要用户进行的测试用例将使用此用户运行。
BASE_USER_NAME="{name}"
BASE_USER_EMAIL={email}
BASE_USER_PASSWORD={password}
这将设置项目的依赖项,但是您仍然需要设置数据库。您必须首先创建一个 MySQL 数据库,然后将其详细信息存储在 .env 文件中,如下所示。
DB_DATABASE={database}
DB_USERNAME={username}
DB_PASSWORD={password}
如果您有缓存驱动程序,请添加以下行。
CACHE_DRIVER={cache driver name}
SESSION_DRIVER={cache driver name}
QUEUE_DRIVER={cache driver name}
如果缓存驱动程序是 redis,您应该指定如下设置。
REDIS_HOST={host}
REDIS_CLIENT={client}
REDIS_PASSWORD={password}
REDIS_PORT={port}
截至目前,我们支持 Facebook、Twitter 和 Google 在 Socialite 插件上。您可以通过添加以下行来指定账户。
FACEBOOK_KEY={key}
FACEBOOK_SECRET={secret}
FACEBOOK_REDIRECT_URI=http://api-dev.aki.com/auth/authenticate/callback/facebook
TWITTER_KEY={key}
TWITTER_SECRET={secret}
TWITTER_REDIRECT_URI=http://api-dev.aki.com/auth/authenticate/callback/twitter
GOOGLE_KEY={key}
GOOGLE_SECRET={secret}
GOOGLE_REDIRECT_URI=http://api-dev.aki.com/auth/authenticate/callback/google
如果您此时想要将修改后的仓库保存到其自己的仓库中,可以使用以下命令。
git push https://{username}:{password}@github.com/{your github user}/{your repo} +{branch of the skeleton you want to copy}:master
将您的仓库的来源设置为您推送到的新位置。
git remote set-url origin https://{username}:{password}@github.com/{your github user}/{your repo}
然后,我们使用 Doctrine 的辅助命令来构建我们的模式和代理。迁移文件位于 ./database/migrations
,目前为空。运行 migrations:diff
生成第一个迁移文件,它将基于实体生成。然后运行 migrations:migrate
将其放入数据库中。此外,运行 generate:proxies
为每个实体创建代理。
php artisan doctrine:migrations:diff
php artisan doctrine:migrations:migrate
php artisan doctrine:generate:proxies
此时,您的数据库仍然为空。请运行生成器以填充权限和身份验证必需品,添加基本用户和一些示例记录。生成器文件位于 ./database/seeds
。
php artisan db:seed
php artisan db:seed --class=SampleRecordsSeeder
登录
向 /auth/authenticate
发送 POST 请求,将 Content-Type
设置为 application/json
。JSON 结构应如下所示
{
"email": "{email address from env}",
"password": "{email address from env}"
}
如果响应成功,您将收到一个令牌,您可以使用它向服务器发送后续请求,同时保持给定的用户身份验证。要通过令牌值发送,请将其作为以下方式发送到 Authorization
标头
Authorization: Bearer {token}
要获取用户详情,请向 /auth/me
发送 GET 请求,您将收到如下请求
{
"id": 1,
"email": "theodora39@example.net",
"name": "Dillon Effertz",
"job": "Roofer"
}
有关向服务器发送请求的更多信息,请参阅 Dingo API Wiki。
开发服务器
当您对实体进行更改时,您需要为实体生成代理,以便系统可以快速加载每个请求。为此,请在终端中运行以下命令
php artisan doctrine:generate:proxies
除非您修改了实体,否则这并不是必需的,因为它们的代理已经生成并提交。
如果您的实体更改修改了其数据库结构,您可以运行以下命令来创建基于更改的迁移
php artisan doctrine:migrations:diff
php artisan doctrine:migrations:migrate
路由
您可以通过查看[路由文件]来获取版本的路由。
参见:tempest-tools-moat (https://github.com/tempestwf/tempest-tools-moat) 以获取有关将 acl 中间件添加到路由的信息。
添加新版本
重要的文件都包含在 app/API
文件夹中。该项目有同一 API 的 3 个不同版本,以尽可能保持简单以便扩展。
当您想添加新版本时,您需要遵循以下过程
-
将整个上一个版本的文件夹复制到
app/API
文件夹中,并给它一个合适的名称(例如,将app/API/V3
文件夹复制到app/API/V4
) -
进行搜索和替换操作以更新文件夹的引用,从上一个版本更新到新版本(例如,在
V4
文件夹中将所有V3
实例更新为V4
) -
将上一个版本中存在的路由复制到路由文件中的新版本
-
更新
config/api.php
文件,以便在auth
部分包含新版本 -
更新
.env
文件中的API_VERSION
变量为新版本 -
对 API 的新版本进行更改(例如,添加新实体或对现有实体的字段进行更改)
-
运行以下命令以更新数据库架构和代理
php artisan doctrine:migrations:diff php artisan doctrine:migrations:migrate php artisan doctrine:generate:proxies
-
在路由文件中添加任何新端点的路由
-
以防 APP_URL 缺失,您可以运行以下行
php artisan config:clear
移除版本
要移除版本,请遵循以下过程
- 从
app/API
文件夹中移除版本的文件夹 - 从路由文件中移除已移除版本的路线
- 从
config/api.php
文件中移除auth
条目 - 检查
.env
文件中的API_VERSION
变量是否未设置为已移除的版本
本地化
默认情况下,我们使用 ageras-com/laravel-onesky 作为翻译包装器。这是 OneSky 与系统的无缝集成。它使用 artisan 运行,具有拉取和推送功能。这意味着我们不需要手动上传和下载翻译。
- 将 ONESKY_API_KEY 和 ONESKY_SECRET 添加到您的 .env 文件中
- 创建系统的基本区域设置。默认情况下,我们使用 'en' 作为默认设置。翻译文件位于 resources/lang 文件夹中,并且每个区域文件夹都是分开的。
- 当您准备好翻译语言文件时,使用以下简单的 artisan 命令将它们上传到您的 OneSky 账户
php artisan onesky:push
- 当您的语言文件已被翻译后,使用此命令直接将它们下载到项目中
php artisan onesky:pull
- 如果您只想拉取某些语言,可以使用 --lang= 标志
php artisan onesky:pull --lang=en,da,no
- 如果您有多个项目,可以使用 --project= 标志来指定 ID
php artisan onesky:push --project=1337
注意:您可以在 app.php 配置文件中找到默认的区域设置回退。要翻译,您可以使用 trans() 进行翻译(例如:echo trans('auth_failed');)。有关参考,您可以查看 https://packagist.org.cn/packages/ageras/laravel-onesky
已知不规则性
当在composer.json中添加库或在.env文件中添加值时,有时它不会立即反映出来。如果你遇到这种情况,你可能需要运行以下命令
composer dump-autoload -o
php artisan config:clear
php artisan cache:clear