2amigos/storage-service

Slim 3 存储API微服务

dev-master 2019-03-21 20:46 UTC

This package is auto-updated.

Last update: 2024-09-22 09:13:32 UTC


README

Storage API Service

存储服务是一个微服务,使用league/flysystem文件系统抽象来存储文件。

它被构建以允许我们在2amigos的开发团队中避免在涉及微服务基础设施的项目上重复配置存储适配器。它是两个独立应用的组合,一个是Symfony的CI应用,另一个是使用Slim3构建的API。

项目使用Monolog进行日志记录,Fractal作为序列化工具,Tactitian作为命令总线,基本访问认证Json Web Tokens(这是可选的)进行认证,Zend filter进行数据过滤和验证,以及Phinx进行数据库迁移。

包含Docker composePostman collection文件,以便于开发,尽管开发时不需要严格使用docker,因为可以使用内置的PHP服务器。

此项目试图遵循DDD原则。

安装

使用composer安装最新版本。

$ composer create-project --no-interaction --stability=dev 2amigos/storage-service app  

如果您正在使用私有仓库(以下以github url为例)。

$ composer create-project --no-interaction --stability=dev 2amigos/storage-service app --repository-url=https://github.com/2amigos/storage-service  

配置

项目使用环境文件来配置机密信息。因此,您必须在项目的根目录下创建一个名为.env的文件。已提供包含所有必需环境值的.env.example文件。修改该文件并将其保存为根目录下的.env

默认情况下,API应用配置为在基本认证过程中运行。它使用用户数组来完成此目的,但您可以很容易地通过配置[HttpBasicAuthentication middleware(https://github.com/tuupola/slim-basic-auth/blob/3.x/src/HttpBasicAuthentication.php#L43)来改变这种行为,创建自己的或使用库中提供的。请参阅PdoAuthenticator

如果认证成功,操作将返回一个Json Web Token,用于后续调用。

认证或使用作用域是可选的。如果您不希望使用这种类型的设置,只需删除HttpBasicAuthenticationJwtAuthenticationScopeMiddleware中间件的中间件配置即可。

用法

使用您在.env文件中使用的凭据创建一个数据库。现在,您可以使用以下命令运行Phinx数据库迁移

./vendor/bin/phinx migrate -e development

为了本例,请转到应用的public文件夹并像这样启动内置的PHP服务器

php -S localhost:8080  

现在我们可以访问API,地址为:http://127.0.0.1:8080

获取令牌

要获取令牌,请使用以下操作

$ curl "https://127.0.0.1:8080/token" \  
 --request POST \ --include \ --insecure \ --header "Content-Type: application/json" \ --data '["mail.all"]' \ --user test:test  
HTTP/1.1 201 Created  
Content-Type: application/json  
  
{  
 "data": { "token": "XXXXXXXXXX", "expires": 1550271641 }
 }

存储文档

同步

使用token,您现在可以发送一个application/form-data格式的请求来存储文档。

$ curl -X POST \  
 https://127.0.0.1:8080/document/store \ -H 'Authorization: Bearer YOUR_TOKEN_HERE' \ -H 'Cache-Control: no-cache' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Postman-Token: 22bf2715-35e4-41ee-a04b-fd8beddcdd62' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -F name=nameofthedocument \ -F async=false \ -F 'document=@/path/to/document/to/attach/41835188_10217308479844850_6484466208170049536_o.jpg'  

上述命令将在默认配置在runtime文件夹中的spool目录下创建一个电子邮件消息。

异步

将文档发送到队列

Enqueue是默认的队列服务,并配置为使用runtime/queue目录。

curl -X POST \  
 https://127.0.0.1:8080/document/store \ -H 'Authorization: Bearer YOUR_TOKEN_HERE' \ -H 'Cache-Control: no-cache' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Postman-Token: 22bf2715-35e4-41ee-a04b-fd8beddcdd62' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -F name=nameofthedocument \ -F async=true \ -F 'document=@/path/to/document/to/attach/41835188_10217308479844850_6484466208170049536_o.jpg'  

上述命令将在默认配置在runtime文件夹中的spool目录下创建一个电子邮件消息。

从队列中获取文档并存储

我们使用Enqueue Filesystem Transport来简化从队列存储文档的任务,因为它包含一些实用的命令。

php-enqueue/enqueue-bundle提供了一组实用的命令。有关这些命令的完整参考,请访问其文档

用于消费队列中所有文档的是enqueue:consume命令:./bin/console enqueue:consume storage --no-interaction -vvv --receive-timeout=60000 端点响应将包含文档的uuid,您可以在其他调用中使用它。

{
    "data": {
        "success": true,
        "status": 3,
        "uuid": "136b4cdf-736e-488a-a427-b1d1114f376d"
    }
}

分页

对于分页,您可以使用Pagerfanta或Cursor。您可以选择其中之一,这取决于您在dependencies.php中的配置 - $container['paginator'] = $container['paginator.pagerfanta']; 如果您想了解更多关于Fractal分页的信息,请在这里查看Fractal Pagination

示例

Pagerfanta

https://127.0.0.1:8080/documents/list?filter=limit(3|1):order(created_at|desc) 响应中将看到类似的内容

"meta": {
        "pagination": {
            "total": 17,
            "count": 3,
            "per_page": 3,
            "current_page": 2,
            "total_pages": 6,
            "links": {
                "previous": "https://127.0.0.1:8080/documents/list?filter=limit(3|1):order(created_at|desc)",
                "next": "https://127.0.0.1:8080/documents/list?filter=limit(3|3):order(created_at|desc)"
            }
        }
    }

请注意,您还有下一页和上一页的链接可以使用。

Cursor

https://127.0.0.1:8080/documents/list?cursor=limit(3|2) 其中3是限制数,2是作为游标使用的起始ID。您将得到类似的内容

"meta": {
        "cursor": {
            "current": "2",
            "prev": null,
            "next": "4",
            "count": 3
        }
    }

测试

对于测试,我们使用PHPUnit

设置

为了设置您的测试环境,需要几个步骤

  • 创建.env.test文件。您可以使用.env.example并根据需要修改其值来创建测试文件。APP_ENV的值应为test
  • 创建一个测试数据库并使用env.test文件中的值。
  • 运行迁移以填充测试数据库 ./vendor/bin/phinx migrate -e testing
  • ./phinx.php中将使用的env文件更改为.env.test

运行测试

首先您需要运行您的本地测试服务器。转到public/test/目录并使用此命令:php -S localhost:8081

如果没有错误,您应该会看到测试服务器正在端口8081上监听 - Listening on http://localhost:8081

最后,使用此命令运行测试:./vendor/bin/phpunit --testdox tests --bootstrap tests/autoload.php

贡献

要贡献,请阅读我们的贡献指南

致谢

许可证

BSD许可证(BSD)。请参阅许可文件获取更多信息。

2amigOS!
软件之外
www.2amigos.us