napp/apicore
Composer 安装命令:
composer require napp/apicore
包简介
API core for projects
README 文档
README
Use as a foundation for APIs.
Features
- Full request cycle
- APU auth guard
- Transform request input based on model api mapping
- Validate transformed data
- Transform response output (with support for nested relationships using
TransformAware) - Correct HTTP responses backed into ApiController
- Exception handling with two renderers (dev and prod)
- Standard Exceptions
- ETag middleware for cache responses (Not Modified 304)
- Internal Router for internal api requests
- API Proxy to use easy request handling
Usage
Transform Mapping
Being able to hide database fields from the outside exposed API. With auto type casting.
<?php use Illuminate\Database\Eloquent\Model; class Post extends Model { /** * @var array */ public $apiMapping = [ 'id' => ['newName' => 'id', 'dataType' => 'int'], 'image' => ['newName' => 'image', 'dataType' => 'string'], 'title' => ['newName' => 'name', 'dataType' => 'string'], 'description' => ['newName' => 'desc', 'dataType' => 'string'], 'created_at' => ['newName' => 'createdAt', 'dataType' => 'datetime'], 'published' => ['newName' => 'published', 'dataType' => 'boolean'], ]; }
Factory
Using a factory pattern.
<?php namespace App\Posts\Factory; use App\Posts\Models\Post; use Napp\Core\Api\Validation\ValidateTrait; class PostFactory { use ValidateTrait; /** * @param array $attributes * @param bool $validate * @return Post * @throws \Napp\Core\Api\Exceptions\Exceptions\ValidationException */ public static function create(array $attributes, $validate = true): Post { if (true === $validate) { static::validate($attributes, PostValidationRules::$createRules); } return new Post($attributes); } }
Requests
Extending the ApiRequest will automatically transform the input and validate it if Laravel rules are defined.
<?php namespace App\Posts\Request; use App\Posts\Factory\PostValidationRules; use App\Posts\Transformer\PostTransformer; use Napp\Core\Api\Requests\ApiRequest; use Napp\Core\Api\Transformers\TransformerInterface; class StorePostRequest extends ApiRequest { /** * @return array */ public function rules(): array { return PostTransformer::$createRules; } /** * @return TransformerInterface */ protected function getTransformer(): TransformerInterface { return app(PostTransformer::class); } }
API Controllers
API Controllers can use the requests, the factory for creating a model, transforming the output and finally deliver the correct reponse.
<?php namespace App\Posts\Controllers\Api; use App\Posts\Factory\PostFactory; use App\Posts\Transformer\PostTransformer; use Napp\Core\Api\Controllers\ApiController; class PostController extends ApiController { public function show(int $id, Request $request, PostTransformer $transformer): JsonResponse { $post = $this->postRepository->find($id); if (null === $post) { return $this->responseNotFound(); } return $this->respond($transformer->transformOutput($post)); } public function store(StorePostRequest $request, PostTransformer $transformer): JsonResponse { if (/* some logic */) { return $this->responseUnauthorized(); } $post = PostFactory::create($request->validated(), false); return $this->responseCreated($transformer->transformOutput($post)); } }
Internal router
Using the Internal router to request APIs.
<?php use Napp\Core\Api\Controllers\ApiInternalController; class MyController extends ApiInternalController { public function someImportantAction() { // using API get/post/put/delete $data = $this->get('/api/v1/some/route'); $stuff = $this->post('/api/v1/new/stuff', $data); return view('my.view', compact('stuff')); } }
napp/apicore 适用场景与选型建议
napp/apicore 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 6.46k 次下载、GitHub Stars 达 2, 最近一次更新时间为 2017 年 11 月 15 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「api」 「napp」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 napp/apicore 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 napp/apicore 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 napp/apicore 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
DBAL core for projects
A PSR-7 compatible library for making CRUD API endpoints
ACL core for projects
Module core for projects
New Relic metrics for Laravel Nova
SQL query assertions for Codeception
统计信息
- 总下载量: 6.46k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 1
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-11-15