bordman/parser
Composer 安装命令:
composer require bordman/parser
包简介
Simple PHP Parser Utility Library for API Development
README 文档
README
Simple PHP Parser Library for API Development, parse a post http payload into a php array.
Also see the Responder library for handling output.
Installation
Begin by installing this package through Composer. From the Terminal:
composer require nathanmac/parser
Laravel/Lumen Users
| Laravel/Lumen Verison | Supported Library Verison |
|---|---|
| Laravel/Lumen 5+ | > 3.* |
| Laravel 4 | 2.* |
Laravel Users (Adding the Service Provider)
If you are a Laravel user, then there is a service provider that you can make use of to automatically prepare the bindings and such.
Include the service provider within app/config/app.php.
'providers' => [ ..., Nathanmac\Utilities\Parser\ParserServiceProvider::class ];
And, for convenience, add a facade alias to this same file at the bottom:
'aliases' => [ ..., 'Parser' => Nathanmac\Utilities\Parser\Facades\Parser::class, ];
Lumen Users (Adding the Service Provider)
If you are a Lumen user, then there is a service provider that you can make use of to automatically prepare the binding and such.
// bootstrap/app.php $app->register('Nathanmac\Utilities\Parser\ParserServiceProvider');
Lumen users can also add the facade alias.
// bootstrap/app.php class_alias('Nathanmac\Utilities\Parser\Facades\Parser', 'Parser');
Using the Facade
public function index() { Parser::payload('application/json'); Parser::json($payload); // JSON > Array Parser::xml($payload); // XML > Array Parser::yaml($payload); // YAML > Array Parser::querystr($payload); // Query String > Array Parser::serialize($payload); // Serialized Object > Array Parser::bson($payload); // BSON > Array Parser::msgpack($payload); // MSGPack > Array Parser::all(); // Return all values Parser::has('key'); // Does a key exist, with value. Parser::get('key', 'default value'); // Get value by key, set an optional default. Parser::only('id', 'name', 'email'); // Only return value from the selected keys. Parser::except('password'); // Don't return values from the selected keys. Parser::mask($mask); // Return masked values (see Mask Function, below). }
All the examples below assume you aren't using Laravel (or Lumen), and therefore don't have access to the facade. As with any other facade, instead of:
$parser = new Parser(); $parser->{$method}($payload);
just use:
Parser::{$method}($payload);
Usage
Parsing Functions
$parser->json($payload); // JSON > Array $parser->xml($payload); // XML > Array $parser->yaml($payload); // YAML > Array $parser->querystr($payload); // Query String > Array $parser->serialize($payload); // Serialized Object > Array $parser->bson($payload); // BSON > Array $parser->msgpack($payload); // MSGPack > Array
Parse Input/Payload (PUT/POST)
$parser = new Parser(); $parser->payload(); // Auto Detect Type - 'Content Type' HTTP Header $parser->payload('application/json'); // Specifiy the content type
Helper functions
$parser = new Parser(); $parser->all(); // Return all values $parser->has('key'); // Does a key exist, with value. $parser->get('key', 'default value'); // Get value by key, set an optional default. $parser->only('id', 'name', 'email'); // Only return value from the selected keys. $parser->except('password'); // Don't return values from the selected keys. $parser->mask($mask); // Return masked values (see Mask Function, below).
Mask function
The mask function processes payload data using a configuration mask, thereby returning only a selected subset of the data.
It works just like the only method but with the added benefit of allowing you to specify a mask in the form of an array,
this means you can generate masks on-the-fly based on system and/or user defined conditions.
Demo
Mask
Defining the mask, masks consist of basic array structure, for this particular example we have some rules for the data to be returned they include: - the title of the post - all the body's for all the comments.
$mask = [ 'post' => [ 'title' => '*', 'comments' => [ 'body' => '*' ] ] ];
Sample Payload
{
"post": {
"title": "Hello World",
"author": "John Smith",
"comments": [
{"body": "This is a comment", "date": "2015-02-20"},
{"body": "This is another comment", "date": "2015-05-09"}
]
}
}
Applying the Mask
$parser = new Parser(); $output = $parser->mask($mask);
Output
This is the output generated as a result of applying the mask against the sample payload provided above.
$output = [ 'post' => [ 'title' => 'Hello World', 'comments' => [ ['body' => 'This is a comment'], ['body' => 'This is another comment'] ] ] ];
Wildcards/Special Keys (*, %, :first, :last, :index[0], :item[0])
$parser = new Parser(); $parser->has('message.*'); // Does a key exist, with value. (Wildcard key returns first item found) $parser->get('message.*'); // Get value by key. (Wildcard key returns first item found) $parser->has('message.:first'); // Does a key exist, with value. (:first key returns first item found) $parser->get('message.:first'); // Get value by key. (:first key returns first item found) $parser->has('message.:last'); // Does a key exist, with value. (:last key returns last item found) $parser->get('message.:last'); // Get value by key. (:last key returns last item found) $parser->has('message.:index[0]'); // Does a key exist, with value. (:index[0] key returns item at index 0) $parser->get('message.:index[0]'); // Get value by key. (:index[0] key returns item at index 0) $parser->has('message.:item[0]'); // Does a key exist, with value. (:item[0] key returns item at index 0) $parser->get('message.:item[0]'); // Get value by key. (:item[0] key returns item at index 0)
Parse JSON
$parser = new Parser(); $parsed = $parser->json(' { "message": { "to": "Jack Smith", "from": "Jane Doe", "subject": "Hello World", "body": "Hello, whats going on..." } }');
Parse XML
$parser = new Parser(); $parsed = $parser->xml(' <?xml version="1.0" encoding="UTF-8"?> <xml xmlns:ns="http://example.com/xmlns"> <message status="sent"> <ns:meta hint="created">Created 5 minutes ago</ns:meta> <to>Jack Smith</to> <from>Jane Doe</from> <subject>Hello World</subject> <body>Hello, whats going on...</body> </message> </xml>');
Parse Query String
$parser = new Parser(); $parsed = $parser->querystr('to=Jack Smith&from=Jane Doe&subject=Hello World&body=Hello, whats going on...');
Parse Serialized Object
$parser = new Parser(); $parsed = $parser->serialize('a:1:{s:7:"message";a:4:{s:2:"to";s:10:"Jack Smith";s:4:"from";s:8:"Jane Doe";s:7:"subject";s:11:"Hello World";s:4:"body";s:24:"Hello, whats going on...";}}');
Parse YAML
$parser = new Parser(); $parsed = $parser->yaml(' --- message: to: "Jack Smith" from: "Jane Doe" subject: "Hello World" body: "Hello, whats going on..." ');
Parse BSON
$parser = new Parser(); $parsed = $parser->bson('BSON DATA HERE');
Parse MSGPack
$parser = new Parser(); $parsed = $parser->msgpack('MSGPACK DATA HERE');
Custom Parsers/Formatters
You can make your own custom parsers/formatters by implementing FormatInterface, the below example demostrates the use of a custom parser/formatter.
use Nathanmac\Utilities\Parser\Formats\FormatInterface; /** * Custom Formatter */ class CustomFormatter implements FormatInterface { /** * Parse Payload Data * * @param string $payload * * @return array * * @throws ParserException */ public function parse($payload) { $payload; // Raw payload data $output = // Process raw payload data to array return $output; // return array parsed data } }
Using the CustomFormatter
use Acme\Formatters\CustomFormatter; $parser = new Parser(); $parsed = $parser->parse('RAW PAYLOAD DATA', new CustomFormatter());
Autodetecting the CustomFormatter
use Acme\Formatters\CustomFormatter; $parser = new Parser(); $parser->registerFormat('application/x-custom-format', 'Acme\Formatters\CustomFormatter'); $parser->payload('application/x-custom-format');
Testing
To test the library itself, run the tests:
composer test
Contributing
Please see CONTRIBUTING for details.
Credits
License
The MIT License (MIT). Please see License File for more information.
Appendix
Supported Content-Types
XML
---
application/xml > XML
text/xml > XML
JSON
----
application/json > JSON
application/x-javascript > JSON
text/javascript > JSON
text/x-javascript > JSON
text/x-json > JSON
YAML
----
text/yaml > YAML
text/x-yaml > YAML
application/yaml > YAML
application/x-yaml > YAML
BSON
----
application/bson > BSON
MSGPack
-------
application/msgpack > MSGPack
application/x-msgpack > MSGPack
MISC
----
application/vnd.php.serialized > Serialized Object
application/x-www-form-urlencoded' > Query String
bordman/parser 适用场景与选型建议
bordman/parser 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 09 月 07 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「json」 「xml」 「api」 「parser」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 bordman/parser 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 bordman/parser 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 bordman/parser 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Kinikit - PHP Application development framework MVC component
ext-json wrapper with sane defaults
A package to cast json fields, each sub-keys is castable
Load DOM document safety
A PSR-7 compatible library for making CRUD API endpoints
swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations
统计信息
- 总下载量: 3
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 10
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-09-07