romainjudic/symfony-api-skeleton

为API开发而优化的最小化安装的Symfony应用的骨架。


README

该项目是构建干净Symfony Web API的骨架。它包含了您将需要的多数包和配置,并帮助您减少Symfony项目的繁琐搭建时间。

目录

已安装内容

要求

请确保您已安装以下内容

然后运行以下命令以检查您的系统是否准备好运行Symfony应用

symfony check:requirements

如果一切正常,您可以继续。否则,在继续之前,请修复需要修复的问题。

安装

创建您的项目

该项目旨在帮助您开始自己的Symfony应用。

您可以使用Composer的create-project命令创建应用:它将使用本项目已完成的配置来创建一个新的项目。

composer create-project romainjudic/symfony-api-skeleton your-app-name -sdev

注意:如您所见,我们使用"-sdev"标志,因为该项目没有官方的稳定版本。这仅告诉Composer,使用此存储库的最新版本是安全的。该项目还没有合适的版本,但很快就会有。

创建您的本地envfile

使用"enviles"实现"external"配置。

".env"文件是主要的配置文件,目前不需要修改。

".env.local"文件是一个额外的envfile,将包含依赖于您的安装的配置数据。您需要创建并填写此文件。

要创建它,复制dist文件".env.local.dist"并填写空值

  • "APP_SECRET"是用于编码半敏感数据的密钥字符串。请给它一个随机值。
  • "DATABASE_URL"是您的数据库连接字符串。
  • 目前请保留"JWT_PASSPHRASE"为空,我们将在下一部分讨论它。

配置JWT加密

您可以按照LexikJwtAuthenticationBundle的网站上的说明创建JWT加密的密钥和口令。

警告:确保写下您用于生成密钥的口令。

警告:公钥/私钥不会存储在您的Git存储库中(如果您创建了)。您需要为每个安装提供/创建它们。

密钥和口令不再位于配置文件夹中。它们在您的envfiles中设置。您可以使用"JWT_SECRET_KEY"和"JWT_PUBLIC_KEY"在".env"文件中更改密钥位置。
您必须在".env.local"文件的"JWT_PASSPHRASE"变量中设置您的口令值。

完成Symfony安装

现在一切配置就绪后,您可以完成Symfony的安装(清除缓存并安装资源)

composer run auto-scripts

创建您的第一个迁移

在生成任何迁移之前,请确保您已配置了数据库的服务器版本。生成迁移时的数据库版本必须与生产环境中使用的版本相同。

生成一个反映默认用户模型的新的迁移文件。

php bin/console make:migration

使用方法

开发服务器

为了方便使用,您可以使用Symfony的开发服务器来开发您的应用程序。(但请注意,这不适合生产环境!)您也可以将应用程序放入一个传统的Web服务器,使其目标为“public/index.php”文件。

启动开发服务器以运行应用程序。

symfony server:start

现在,您的应用程序应该运行在 "https://:8000"。如果一切正常,您应该在 "https://:8000/_profiler/" 看到您的分析器。

认证

为了访问受保护的API路由,您必须获取一个JWT(JSON Web Token)。

登录路由在 "/auth/login"。

但是您仍然需要一个用户来尝试它!在数据库中手动插入一个用户

  • 使用以下命令对密码进行编码: php bin/console security:encode-password
  • 在数据库中插入用户及其密码。

现在您可以调用登录路由

POST https://:8000/auth/login

{
    "email": "your.email@test.com",
    "password": "yourpassword"
}

应用程序应该响应一个令牌,您现在可以使用它作为Bearer令牌:对于需要认证的每个API调用,添加“Authorization: Bearer YOUR_TOKEN”头。

为了测试它是否正常工作,应用程序骨架中有一个默认路由需要认证:"/default"。

文档

您可以在以下位置访问您API路由的Nelmio/OpenAPI文档的Web GUI:"https://:8000/doc/"。

还有一个JSON版本可供使用:"https://:8000/doc.json"。

有关如何编写和自定义文档的更多信息,请参阅NelmioApiDocBundle的文档