定制 proklung/request-log-bundle 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

proklung/request-log-bundle

Composer 安装命令:

composer require proklung/request-log-bundle

包简介

Бандл для создания и использования моков Response.

README 文档

README

Форк пакета. Доработан под личные нужды, плюс добавил некоторые экспериментальные битриксовые наработки (получилось не стабильно).

Зачем?

Удобно генерировать фикстуры для функциональных тестов из ответов внешнего API.

Основное

  1. Добавляешь заголовок x-generate-response-mock к запросу - получаешь мок в виде файла. Если мок уже существует, то отдаются данные из него

Известные ограничения

Если GET запрос очень длинный - превышает 255 символов, - то облом, сохранить мок не удается.

Битриксовые дела

Если бандл грузится не из под Битрикса, то соответствующие сервисы удаляются из контейнера.

Идея - создавать моки по url, использующим нативные битриксовые средства (или даже статические страницы).

В конфигурации бандла (файл /local/config/packages/request_log.yaml) в секции bitrix_uri_list указываются regex паттерны страниц, подвергающихся обработке.

Установка

composer require proklung/request-log-bundle

Оригинальная документация

Description

This bundle allows to log HTTP requests and associated responses as json files. This generated json files can be used as API mock in order to test a front app without running the api.

How it works ?

After each request (Kernel::TERMINATE event) containing the x-generate-response-mock header, a json file is created containing the request and the response.

Examples :

GET /categories

app/log/mocks/categories/GET__.json

{
    "request": {
        "uri": "/categories",
        "method": "GET",
        "parameters": [],
        "content": ""
    },
    "response": {
        "statusCode": 200,
        "contentType": "application/json",
        "content": {
            "@context": "/contexts/Category",
            "@id": "/categories",
            "hydra:member": [
                {"name": "foo"},
                {"name": "bar"}
            ]
        }
    }
}

PUT /categories/1 {"foo": "bar"}

app/log/mocks/categories/PUT__1-a5e74.json

{
    "request": {
        "uri": "/categories/1",
        "method": "PUT",
        "parameters": [],
        "content": {
            "foo": "bar"
        }
    },
    "response": {
        "statusCode": 204,
        "contentType": "application/json",
        "content": ""
    }
}

File naming strategy

All files are created with the following convention :

uri/METHOD__segments{--sorted-query=string&others}{__<sha1_substr5(sortedJsonContent)>}{__<sha1_substr5(sortedPostParameters)>}.json

Examples :

URL Filename
GET / GET__.json
GET /categories categories/GET__.json
GET /categories/1 categories/GET__1.json
GET /categories?search[category][]=foo categories/GET__--search%5Bcategory%5D%5B%5D=foo.json
GET /categories?order[foo]=asc&order[bar]=desc categories/GET__--order%5Bbar%5D=desc&order%5Bfoo%5D=asc.json
GET /categories?parent=/my/iri categories/GET__--parent=%2Fmy%2Firi.json
POST /categories PARAMS: foo1=bar1; foo2=bar2 categories/POST____3e038.json
POST /categories CONTENT: {"foo1":"bar1", "foo2":"bar2"} categories/POST____3e038.json
PUT /categories/1 CONTENT: {"foo2":"bar2", "foo1":"bar1"} categories/POST__1__3e038.json
The filenames query strings can be hashed by setting the `hash_query_params` option to `true`.
For example, `categories/GET__--order[bar]=desc&order[foo]=asc.json` will be `categories/GET__--b0324.json`

The filenames query strings with non-asssocitive arrays are not indexed by default : `?foo[]=bar`.
You can use the indexed format by setting the `use_indexed_associative_array` option to `true` : `?foo[0]=bar`.

If necessary, configure the bundle to your needs (example with default values):

# app/config/config_dev.yml

request_log:
    mocks_dir: %kernel.logs_dir%/mocks/
    hash_query_params: false
    use_indexed_associative_array: false
    # Битриксовые URL (нестабильный функционал)
    bitrix_uri_list:
     # - '/^\/clubs\/$/'
     #  - '/^\/about\/$/'
     # - '/^\/xxx\/$/'

If your are using the NelmioCorsBundle or another CORS protection, you must add the header in the allowed ones :

nelmio_cors:
    defaults:
        allow_headers: ['x-generate-response-mock']

Usage

The request & response logger is not always activated. To log a request, add the x-generate-response-mock header into your request :

GET /categories HTTP/1.1
Host: api.my.domain
x-generate-response-mock: true

Commands

Some useful commands are available to manager your mocks :

Clear all mocks

app/console mroca:request-log:clear 

Save mocks in a target directory

app/console mroca:request-log:dump /tmp/mocksdirtarget

统计信息

  • 总下载量: 17
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-05-03

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固