JSON Schema: possible incompatibilities when plugging symfony/json-schema
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 8/100
Hướng nghiên cứu
This is a design survey, not a single fix. Start with ShortNameDefinitionPolicy, DefinitionPolicyInterface, SchemaDocument and DefinitionProcessorInterface, which the issue names as the points where the output would diverge. Done means agreeing which differences API Platform will accept, which it will adapt through an extension point, and which need follow-up issues, with the decision recorded on this thread.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Description
Follow-up of #8696: what changes if api-platform/json-schema uses symfony/json-schema (https://github.com/symfony/symfony/pull/66685).
1. Dependency constraints
- The component first ships in Symfony 8.2 (its
CHANGELOG.md). - It requires PHP
>=8.4.1, API Platform requires PHP>=8.2. - It requires
symfony/type-info^7.4.6|^8.0.6, API Platform requires^7.4 || ^8.0.
2. Output changes with the default configuration
- JSON Schema output uses
$defsand#/$defs/instead ofdefinitionsand#/definitions/(Dialect::jsonSchema202012()). OpenAPI output keeps#/components/schemas/. $schemaishttps://json-schema.org/draft/2020-12/schemainstead ofhttp://json-schema.org/draft-07/schema#.- There is no Swagger 2.0 dialect. API Platform still has the deprecated
--spec-version=2export. - Definition names (
ShortNameDefinitionPolicy) put the format in aformat.<format>part instead of a.jsonldsuffix, append the direction (input/output), and have no.partial,.jsonMergePatchor_noidsuffix. Example:Dummy-read_format.jsonld_outputinstead ofDummy.jsonld-read. A customDefinitionPolicyInterfacecan produce other names. - With a direction, write-only properties are removed from output schemas and read-only properties from input schemas. API Platform keeps them, flagged
readOnly/writeOnly. The component only emits these flags without a direction. - Output schemas require properties that are always initialized (default value, promoted or constructor-set). Otherwise, mandatory constructor arguments are required. API Platform uses
ApiProperty::isRequired()(validation metadata or explicitrequired), with norequiredfor partial updates. callableandresourceproperties are removed. API Platform describes them astype: string.- Examples are
examples: [value]on JSON Schema 2020-12 and OpenAPI 3.1, andexampleonly on OpenAPI 3.0 (Dialect::example()). API Platform emitsexample. - Descriptions come from the PHPDoc. Values API Platform takes from metadata (
ApiPropertydescription,deprecated,externalDocsfromtypes, operation description) are not produced. - Ramsey
UuidInterfaceis not handled. API Platform describes it asformat: uuid.
3. Extension points
- The extension signatures have no operation or
ApiProperty. API Platform data has to go throughConfiguration::$context, which is neither part of the definition fingerprint nor of the default name. Any shape that depends on it (operation, partial update,gen_id) must be encoded in the name by a custom policy, or two shapes share one definition. SchemaDocument::reserve()anddefine()are@internal, and aDefinitionProcessorInterfacecan only change the definition it receives. Shared definitions such asHydraItemBaseSchemacannot be registered from an extension.- The root collection schema is not passed to any extension, so
hydra:member, JSON:APIdata/links/metaand HAL_embeddedstay in an outer decorator. - A
PropertySchemaProviderInterfacecan return user-defined schemas (ApiPropertyschema,jsonSchemaContext,openapiContext), but enrichers still run on top. API Platform leaves user-defined schemas untouched. - A definition is built for the first occurrence of a name, so shapes depending on the parent property (e.g.
gen_idon an embedded relation) collide: "a difference coming only from the parent cannot be detected and the first occurrence wins" (DefinitionPolicyInterface). - A
SchemaDocumentthrows when used with anotherrefPath, so JSON Schema (#/$defs/) and OpenAPI (#/components/schemas/) output cannot share one document.
Fits the existing extension points
- IRI references for non-embedded relations:
ClassSchemaResolverInterfacewithDefinitionParent. - Definition names:
DefinitionPolicyInterface. - Input/output DTOs: caller side.
- Validator constraints: built-in
ValidatorPropertySchemaEnricher. - Definitions shared across OpenAPI operations:
SchemaDocument,Dialect::openApi30()/openApi31(). - Eloquent models: the generator takes a
PropertyInfoExtractorInterface.
- Ngôn ngữ chính
- PHP
- Star
- 2.6k
- Fork
- 989
- Merge trung bình
- 2 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 104
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của api-platform/core
-
JSON:API: resource schemas (`*.jsonapi`) have `properties` but no `type: object`Có thể đã có người làm @ousamabenyounes đã nhận 1 ngày trước. Đang mở
Độ khó 2/5 Dưới một giờ Mức phù hợp với người mới 80/100
api-platform/core#8701 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
JSON:API: `JsonApiCollectionBaseSchemaNoPagination` declares `data` as `type: array` without `items`Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
api-platform/core#8699 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
api:openapi:export --spec-version=3.0.0 outputs `webhooks`, which is invalid in OpenAPI 3.0Có thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
api-platform/core#8690 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
api-platform/core#8680 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 68/100
api-platform/core#8725 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của api-platform/core
Issue tương tự
-
create:theme --tailwind scaffolds version.yaml at 1.0.0 while the LESS variant scaffolds 1.0.1Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 80/100
Maintainer thường phản hồi trong vòng 1 ngày
-
PHP workflow streaming requests buffer the full SSE responseCó thể đã có người làm @Winoren đã nhận hôm nay. Đang mởreview: medium
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
langgenius/dify#44270 · 1 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug customer-reported
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
MagnaCapax/PMSS#1085 ·
Maintainer thường phản hồi trong vòng 5 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
nunomaduro/collision#375 ·