API-Platform将为Schemas(AKA模型)生成Swagger/OpenAPI路由留档,然后在留档下方(文档将它们显示为“模型”,但当前版本(如2.7)将它们显示为“模式”)。
为显示这些模式/模型而生成的内容在哪里?如何删除一些?显示它们的功能是Swagger UI的一部分,但API平台必须负责提供JSON配置,从而更改API平台而不是Swagger UI。注意,这篇文章展示了如何添加模式,但没有展示如何删除模式。除此之外,是否有其他没有详细说明的文档?
正如下面的输出所示,我正在公开抽象组织(AbstractOrganization),然而,这个类被其他几个类扩展了,并不打算公开,只应该公开具体类的模式。请注意,我的AbstractOrganization实体类没有使用ApiResource标记,也没有显示在Swagger/OpenAPI路由文档中,而只显示在模式/模型文档中。
谢谢你
我很确定有更好的方法来实现这一点,但是,以下内容将起作用,可能对其他人有所帮助。
<?php
declare(strict_types=1);
namespace App\OpenApi;
use ApiPlatform\Core\OpenApi\Factory\OpenApiFactoryInterface;
use ApiPlatform\Core\OpenApi\OpenApi;
use ApiPlatform\Core\OpenApi\Model\Paths;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class OpenApiRouteHider implements OpenApiFactoryInterface {
public function __construct(private OpenApiFactoryInterface $decorated, private TokenStorageInterface $tokenStorage)
{
}
public function __invoke(array $context = []): OpenApi
{
$openApi = $this->decorated->__invoke($context);
$removedPaths = $this->getRemovedPaths();
$paths = new Paths;
$pathArray = $openApi->getPaths()->getPaths();
foreach($openApi->getPaths()->getPaths() as $path=>$pathItem) {
if(!isset($removedPaths[$path])) {
// No restrictions
$paths->addPath($path, $pathItem);
}
elseif($removedPaths[$path]!=='*') {
// Remove one or more operation
foreach($removedPaths[$path] as $operation) {
$method = 'with'.ucFirst($operation);
$pathItem = $pathItem->$method(null);
}
$paths->addPath($path, $pathItem);
}
// else don't add this route to the documentation
}
$openApiTest = $openApi->withPaths($paths);
return $openApi->withPaths($paths);
}
private function getRemovedPaths():array
{
// Use $user to determine which ones to remove.
$user = $this->tokenStorage->getToken()->getUser();
return [
'/guids'=>'*', // Remove all operations
'/guids/{guid}'=>'*', // Remove all operations
'/tenants'=>['post', 'get'], // Remove only post and get operations
'/tenants/{uuid}'=>['delete'], // Remove only delete operation
'/chart_themes'=>'*',
'/chart_themes/{id}'=>['put', 'delete', 'patch'],
];
}
}
我正在尝试使用OpenAPI 3.0记录一个micros服务。该服务返回具有任何字段名并且可以包含任何数组、字符串、数字、true、false、null但不包含对象的Json。字符串可能包含ISO日期。只有很少的已知字段名(例如“@id”) 示例: 无效样本: 所以我的第一次尝试是: 我检查了OpenAPI字典规范,建议使用: 但这将允许对象。 我走对了吗?或者说“任何名称、任何值,只是不是另一个
我正在使用Springdoc来记录我在Spring Boot中制作的REST API。我需要从Swagger UI的模式部分隐藏一些模型/模式,这些模型/模式只在应用编程接口内部使用,所以没有必要在模式部分显示它们。 这是我试图隐藏的模型之一: 上图所示模型的超类: 这些示例中的大多数注释都来自JPA或Lombok。需要明确的是:在Schemas部分不可见–我在这里包括它只是为了以防万一。 到目前
我正在尝试为Swagger中的项目获取模型模式。我想通过一个http请求来实现这一点,该请求来自不同于托管Swagger的机器。 我可以从以下位置获取作为json的Swagger API文档: 该响应包含: 是否有任何方法获取“/definitions/Item”模型模式? 我想做一个http获取,比如: 我使用的是Swagger 2.0版。 谢谢
我正在尝试使用AWS API网关实现Swagger或OpenAPI 3.0中定义的API。 这个API中的一个endpoint采用一个抽象的基本模型(让我们称之为< code>Pet以与老套的Swagger示例保持一致),但实际上期望一个从< code>Pet派生的具体模型...例如< code>Dog。 具体模型可以通过上的(type)属性确定。 当然,这是的工作: (取自此处) 好吧,很烦人,
问题内容: 我有一个像这样的模型: 现在,我需要使用此(仅)模型创建两个JSON。 例如,第一个必须这样: 第二个必须像这样: 顺便说一句,我已经测试了和。 第一个问题(据我所知)是,这些字段不能包含在其他JSON中(例如,如果获取此批注,它将不包含在第二个JSON中) 第二个问题是,值不能包含在JSON中。 所以我可以保留空值并防止在不创建额外模型的情况下将某些其他属性包含在JSON中吗?如果答
我有一些脚本,产生与颜色输出,我需要删除ANSI代码。 输出为(在日志文件中): 我不知道如何把ESC字符放在这里,所以我把放在它的位置。 我把剧本改成: 但是现在它给我(在日志文件中): 我怎样才能删除这个'? 也许有一种方法可以完全禁用整个脚本的着色?