nvmcommunity/laravel-mongodb-api

此包已被废弃,不再维护。作者建议使用nvmcommunity/laravel-eloquent-api包。

使用Alchemist Restful API轻松从API请求构建MongoDB查询。

0.0.1 2024-07-11 10:53 UTC

This package is auto-updated.

Last update: 2024-07-12 03:17:31 UTC


README

使用Alchemist Restful API轻松从API请求构建MongoDB查询。

描述

这是一个帮助您将Alchemist Restful API与Laravel MongoDB集成的包。有关Alchemist Restful API的概念和用法更多信息,请参阅Alchemist Restful API文档

安装

composer require nvmcommunity/laravel-mongodb-api

基本用法

步骤 1: 定义API类

<?php

use Nvmcommunity\Alchemist\RestfulApi\Common\Exceptions\AlchemistRestfulApiException;
use Nvmcommunity\Alchemist\RestfulApi\Common\Integrations\AlchemistQueryable;
use Nvmcommunity\Alchemist\RestfulApi\FieldSelector\Handlers\FieldSelector;
use Nvmcommunity\Alchemist\RestfulApi\ResourceFilter\Handlers\ResourceFilter;
use Nvmcommunity\Alchemist\RestfulApi\ResourceFilter\Objects\FilteringRules;
use Nvmcommunity\Alchemist\RestfulApi\ResourcePaginations\OffsetPaginator\Handlers\ResourceOffsetPaginator;
use Nvmcommunity\Alchemist\RestfulApi\ResourceSearch\Handlers\ResourceSearch;
use Nvmcommunity\Alchemist\RestfulApi\ResourceSort\Handlers\ResourceSort;

class PostApiQuery extends AlchemistQueryable
{
    /**
     * @param FieldSelector $fieldSelector
     * @return void
     */
    public static function fieldSelector(FieldSelector $fieldSelector): void
    {
        $fieldSelector->defineFieldStructure([
            '_id', 'title', 'body', 'slug'
        ])->defineDefaultFields(['_id']);
    }

    /**
     * @param ResourceFilter $resourceFilter
     * @return void
     */
    public static function resourceFilter(ResourceFilter $resourceFilter): void
    {
        $resourceFilter->defineFilteringRules([
            FilteringRules::String('_id', ['eq']),
            FilteringRules::String('title', ['eq', 'contains']),
            FilteringRules::String('body', ['eq', 'contains']),
            FilteringRules::String('slug', ['eq']),
        ]);
    }

    /**
     * @param ResourceOffsetPaginator $resourceOffsetPaginator
     * @return void
     */
    public static function resourceOffsetPaginator(ResourceOffsetPaginator $resourceOffsetPaginator): void
    {
        $resourceOffsetPaginator->defineDefaultLimit(10)
            ->defineMaxLimit(1000);
    }

    /**
     * @param ResourceSearch $resourceSearch
     * @return void
     */
    public static function resourceSearch(ResourceSearch $resourceSearch): void
    {
        $resourceSearch->defineSearchCondition('title');
    }

    /**
     * @param ResourceSort $resourceSort
     * @return void
     * @throws AlchemistRestfulApiException
     */
    public static function resourceSort(ResourceSort $resourceSort): void
    {
        $resourceSort->defineDefaultSort('_id')
            ->defineDefaultDirection('desc')
            ->defineSortableFields(['_id', 'title']);
    }
}

步骤 2: 验证并响应用户请求

在执行查询并响应用户请求之前,请确保使用$laravelMongodbBuilder->validate()方法验证从请求输入传递的输入参数。

use App\Http\Controllers\ApiClass\User\PostApiQuery;
use App\Models\Post;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Nvmcommunity\Alchemist\RestfulApi\Common\Exceptions\AlchemistRestfulApiException;
use Nvmcommunity\LaravelMongodbApi\LaravelMongodbBuilder;

class PostController extends Controller
{
    /**
     * @param Request $request
     * @param JsonResponse $response
     * @return JsonResponse
     * @throws AlchemistRestfulApiException
     */
    public function index(Request $request, JsonResponse $response): JsonResponse
    {
        $laravelMongodbBuilder = LaravelMongodbBuilder::for(Post::class, PostApiQuery::class, $request->input());

        if (! $laravelMongodbBuilder->validate($e)->passes()) {
            return $response->setData($e->getErrors())->setStatusCode(400);
        }

        return $response->setData($laravelMongodbBuilder->getBuilder()->get());
    }
}

贡献者

代码贡献者

本项目因所有贡献者的贡献而存在。

许可证

本项目采用MIT许可证。