定制 wizards/rest-api 二次开发

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

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

wizards/rest-api

Composer 安装命令:

composer require wizards/rest-api

包简介

A set of services to help you create beautiful REST APIs

README 文档

README

A framework agnostic PHP library based on fractal to help you craft beautiful REST APIs.

Build Status

Goals

The main goal is to provide an easy to use and powerful REST API library that seamlessly integrates with modern frameworks.

The paradigm reads as follow:

  • A method will ask for a given resource (usually a controller), sending over an http request that we Parse to find standardized parameters. A resource is a data object, that you can fetch from a data store - as a collection or as an entry. Thoses resources can have relationships, can be filtered, can be modified, ....
  • The library will fetch the resource(s) according to the given Object Manager (something like an orm, odm) and request
  • It then transforms the data into standardized resource(s) given the provided Object Reader (there are many ways to configure resources, such as doctrine annotations, configuration files, ...)
  • It sends the found resources to fractal with the appropriate Transformer for serialization on the given output format.

Installation

composer require wizards/rest-api

Usage

The library's conventions are based on the jsonapi ones.

Query Paramters

The RestQueryParser will expect those query parameters:

  • Collection

    • sort
      • name to sort by ascending name
      • -name to sort by descending name
      • Example: ?sort=-date
    • filter to filter resources by values.
      • multiple values for filters should be provided coma-separated.
      • Example: ?filter[name]=dupont,dupond&filter[surname]=thomas
    • filteroperator
      • to change the default filter opetator from = to something else.
      • available operators: <, >, <=, >=, !=, in.
      • Example: ?filter[age]=18&filteroperator[age]=>=
    • include to include relationships data.
      • Example: /books?include=author,editor
    • limit: how many results you want to see by page.
    • page: the page number. Starts at 1.
  • Single resource

    • include to include relationships data. Example: /books/1?include=author,editor

Examples

Plain ol' PHP

<?php

namespace App\Controller;

use Psr\Http\Message\ServerRequestInterface;
use WizardsRest\ObjectManager\ArrayObjectManager;
use WizardsRest\CollectionManager;
use WizardsRest\Provider;
use WizardsRest\Serializer;
use WizardsRest\ObjectReader\ArrayReader;
use WizardsRest\Paginator\ArrayPagerfantaPaginator;
use Symfony\Component\Routing\RouterInterface;
use WizardsRest\Transformer\ArrayTransformer;

Class BookController {
    private $source = [
        ['name' => 'Book 1', 'author' => 'Author 1', 'editor' => 'Editor 1'],
        ['name' => 'Book 2', 'author' => 'Author 2', 'editor' => 'Editor 2'],
	];
    
	// Books controller. Somehow, this is called
    public function getBooks(RouterInterface $router, ServerRequestInterface $request) {
        // Fetch
        $objectManager = new ArrayObjectManager();
        $paginator = new ArrayPagerfantaPaginator($router);
        $collectionManager = new CollectionManager($paginator, $objectManager);
        $collection = $collectionManager->getPaginatedCollection($this->source, $request);
        
        // Transform
        $fractalManager = new \League\Fractal\Manager();
        $reader = new ArrayReader();
        $provider = new Provider(new ArrayTransformer(), $fractalManager, $reader);
        $resource = $provider->transform($collection, $request, null, 'books');
        
        // Serialize
        $serializer = new Serializer($fractalManager, 'https://mysite.com');
        return $serializer->serialize($resource, Serializer::SPEC_DATA_ARRAY, Serializer::FORMAT_ARRAY);
    }
}

Symfony

See the documentation on Wizards Technologies' REST API Bundle

Laravel

We are actively looking for laravel developers to support it !

Future plans

  • Add more tests
  • Add the sparse fieldset feature
  • Add advanced filter operators such as like or between
  • Optimize how the data are fetched from the source.
  • Think about serialization groups.

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2018-09-20

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固