{"id":15492267,"url":"https://github.com/ethlo/zally-maven-plugin","last_synced_at":"2025-04-22T19:26:16.884Z","repository":{"id":40332475,"uuid":"400532484","full_name":"ethlo/zally-maven-plugin","owner":"ethlo","description":"OpenAPI specification linter Maven plugin, supporting pluggable rules via Zally. Requires no additional dependencies or services.","archived":false,"fork":false,"pushed_at":"2024-01-25T13:51:52.000Z","size":77,"stargazers_count":12,"open_issues_count":0,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-29T18:11:20.102Z","etag":null,"topics":["api","java","json","linter","maven-plugin","openapi"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ethlo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-27T14:16:56.000Z","updated_at":"2024-12-09T19:53:05.000Z","dependencies_parsed_at":"2024-01-25T15:01:56.951Z","dependency_job_id":null,"html_url":"https://github.com/ethlo/zally-maven-plugin","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethlo%2Fzally-maven-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethlo%2Fzally-maven-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethlo%2Fzally-maven-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethlo%2Fzally-maven-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ethlo","download_url":"https://codeload.github.com/ethlo/zally-maven-plugin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250307659,"owners_count":21409111,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","java","json","linter","maven-plugin","openapi"],"created_at":"2024-10-02T07:59:53.278Z","updated_at":"2025-04-22T19:26:16.857Z","avatar_url":"https://github.com/ethlo.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zally-maven-plugin\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.ethlo.zally/zally-maven-plugin.svg)](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.ethlo.zally%22%20AND%20a%3A%22zally-maven-plugin%22)\n[![Hex.pm](https://img.shields.io/hexpm/l/plug.svg)](LICENSE)\n[![Build Status](https://app.travis-ci.com/ethlo/zally-maven-plugin.svg?branch=main)](https://app.travis-ci.com/ethlo/zally-maven-plugin)\n[![Coverage Status](https://coveralls.io/repos/github/ethlo/zally-maven-plugin/badge.svg?branch=main)](https://coveralls.io/github/ethlo/zally-maven-plugin?branch=main)\n\nUnofficial maven plugin using [Zally](https://github.com/zalando/zally) for OpenAPI 3.x specification validation.\n\n## Benefits\n\n* Simple to use and tweak rules to fit your requirements\n* No Zally installation/server setup required\n* Supports API definitions with external references out of the box\n\n## Usage\n\n```xml\n\n\u003cplugin\u003e\n    \u003cgroupId\u003ecom.ethlo.zally\u003c/groupId\u003e\n    \u003cartifactId\u003ezally-maven-plugin\u003c/artifactId\u003e\n    \u003cversion\u003eVERSION\u003c/version\u003e\n    \u003cconfiguration\u003e\n        \u003c!--Configure severities that fail the build. Default is MUST, SHOULD --\u003e\n        \u003cfailOn\u003eMUST\u003c/failOn\u003e\n        \u003c!-- The input file to validate --\u003e\n        \u003csource\u003esrc/main/resources/openapi/api.yaml\u003c/source\u003e\n        \u003c!--Ignore certain rules. Default is none --\u003e\n        \u003cskipRules\u003e\n            \u003cskipRule\u003eCommonFieldTypesRule\u003c/skipRule\u003e\n            \u003cskipRule\u003eSecureAllEndpointsWithScopesRule\u003c/skipRule\u003e\n            \u003cskipRule\u003eNoVersionInUriRule\u003c/skipRule\u003e\n        \u003c/skipRules\u003e\n        \u003cruleConfigs\u003e\n            \u003c!-- NOTE: The rule elements' content can be written in JSON or YAML --\u003e\n            \u003cPluralizeResourceNamesRule\u003e\n                whitelist:\n                - current\n                - self\n            \u003c/PluralizeResourceNamesRule\u003e\n        \u003c/ruleConfigs\u003e\n        \u003c!-- Alternatively rules can be configured with configuration file --\u003e\n        \u003crulesConfigLocation\u003ereference.conf\u003c/rulesConfigLocation\u003e\n        \u003c!-- Write the result of the validation to file. Optional--\u003e\n        \u003cresultFile\u003etarget/api_validation_result.yaml\u003c/resultFile\u003e\n    \u003c/configuration\u003e\n    \u003cexecutions\u003e\n        \u003cexecution\u003e\n            \u003cgoals\u003e\n                \u003cgoal\u003ereport\u003c/goal\u003e\n                \u003cgoal\u003evalidate\u003c/goal\u003e\n            \u003c/goals\u003e\n        \u003c/execution\u003e\n    \u003c/executions\u003e\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003c!-- The pluggable rule-set you want to run --\u003e\n            \u003cgroupId\u003eorg.zalando\u003c/groupId\u003e\n            \u003cartifactId\u003ezally-ruleset-zalando\u003c/artifactId\u003e\n            \u003cversion\u003e2.1.0\u003c/version\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n\u003c/plugin\u003e\n```\n\n## Example output\n\n```shell\n[info] Analyzing file 'modified_petstore/petstore.yaml'\n[info] API hierarchy:\n[info] \n[info]     ├── orders\n[info]     │   └── {orderId}\n[info]     │       └── PUT - updateOrder\n[info]     └── pets\n[info]         ├── GET - listPets\n[info]         ├── POST - createPets\n[info]         └── {petId}\n[info]             └── GET - showPetById\n[info] \n[info] \n[info] Validating file 'modified_petstore/petstore.yaml'\n[info] Will fail build on errors of severity: MUST, SHOULD\n[info] \n[info] Rules (36)\n[info] ----------\n[info] 101 - UseOpenApiRule - MUST - Provide API Specification using OpenAPI - https://zalando.github.io/restful-api-guidelines/\n[info] 104 - SecureAllEndpointsRule - MUST - Secure Endpoints - https://zalando.github.io/restful-api-guidelines/\n[info] 105 - SecureAllEndpointsWithScopesRule - MUST - Secure All Endpoints With Scopes - https://zalando.github.io/restful-api-guidelines/\n[info] 107 - ExtensibleEnumRule - SHOULD - Prefer Compatible Extensions - https://zalando.github.io/restful-api-guidelines/\n[info] 110 - SuccessResponseAsJsonObjectRule - MUST - Response As JSON Object - https://zalando.github.io/restful-api-guidelines/\n[info] 115 - NoVersionInUriRule - MUST - Do Not Use URI Versioning - https://zalando.github.io/restful-api-guidelines/\n[info] 116 - VersionInInfoSectionRule - MUST - Use Semantic Versioning - https://zalando.github.io/restful-api-guidelines/\n[info] 118 - SnakeCaseInPropNameRule - MUST - Property Names Must be ASCII snake_case - https://zalando.github.io/restful-api-guidelines/\n[info] 120 - PluralizeNamesForArraysRule - SHOULD - Array names should be pluralized - https://zalando.github.io/restful-api-guidelines/\n[info] 120 - WhiteListedPluralizeNamesForArraysRule - SHOULD - Array names should be pluralized - https://zalando.github.io/restful-api-guidelines/\n[info] 125 - EnumValueTypeRule - SHOULD - Represent enumerations as strings - https://zalando.github.io/restful-api-guidelines/\n[info] 129 - KebabCaseInPathSegmentsRule - MUST - Lowercase words with hyphens - https://zalando.github.io/restful-api-guidelines/\n[info] 130 - SnakeCaseForQueryParamsRule - MUST - Use snake_case (never camelCase) for Query Parameters - https://zalando.github.io/restful-api-guidelines/\n[info] 132 - PascalCaseHttpHeadersRule - SHOULD - Use uppercase separate words with hyphens for HTTP headers - https://zalando.github.io/restful-api-guidelines/\n[info] 134 - PluralizeResourceNamesRule - MUST - Pluralize Resource Names - https://zalando.github.io/restful-api-guidelines/\n[info] 136 - AvoidTrailingSlashesRule - MUST - Avoid Trailing Slashes - https://zalando.github.io/restful-api-guidelines/\n[info] 143 - IdentifyResourcesViaPathSegments - MUST - Resources must be identified via path segments - https://zalando.github.io/restful-api-guidelines/\n[info] 145 - NestedPathsMayBeRootPathsRule - MAY - Consider Using (Non-) Nested URLs - https://zalando.github.io/restful-api-guidelines/\n[info] 146 - LimitNumberOfResourcesRule - SHOULD - Limit number of resource types - https://zalando.github.io/restful-api-guidelines/\n[info] 147 - LimitNumberOfSubResourcesRule - SHOULD - Limit number of Sub-resources level - https://zalando.github.io/restful-api-guidelines/\n[info] 150 - UseStandardHttpStatusCodesRule - MUST - Use Standard HTTP Status Codes - https://zalando.github.io/restful-api-guidelines/\n[info] 151 - JsonProblemAsDefaultResponseRule - MUST - Specify Success and Error Responses - https://zalando.github.io/restful-api-guidelines/\n[info] 153 - Use429HeaderForRateLimitRule - MUST - Use 429 With Header For Rate Limits - https://zalando.github.io/restful-api-guidelines/\n[info] 154 - QueryParameterCollectionFormatRule - SHOULD - Use and Specify Explicitly the Form-Style Query Format for Collection Parameters - https://zalando.github.io/restful-api-guidelines/\n[info] 166 - AvoidLinkHeadersRule - MUST - Avoid Link in Header Rule - https://zalando.github.io/restful-api-guidelines/\n[info] 171 - FormatForNumbersRule - MUST - Define Format for Type Number and Integer - https://zalando.github.io/restful-api-guidelines/\n[info] 172 - MediaTypesRule - SHOULD - Prefer standard media type names - https://zalando.github.io/restful-api-guidelines/\n[info] 174 - CommonFieldTypesRule - MUST - Use common field names - https://zalando.github.io/restful-api-guidelines/\n[info] 176 - UseProblemJsonRule - MUST - Use Problem JSON - https://zalando.github.io/restful-api-guidelines/\n[info] 183 - ProprietaryHeadersRule - MUST - Use Only the Specified Proprietary Zalando Headers - https://zalando.github.io/restful-api-guidelines/\n[info] 215 - ApiIdentifierRule - MUST - Provide API Identifier - https://zalando.github.io/restful-api-guidelines/\n[info] 218 - ApiMetaInformationRule - MUST - Contain API Meta Information - https://zalando.github.io/restful-api-guidelines/\n[info] 219 - ApiAudienceRule - MUST - Provide API Audience - https://zalando.github.io/restful-api-guidelines/\n[info] 224 - FunctionalNamingForHostnamesRule - MUST - Follow Naming Convention for Hostnames - https://zalando.github.io/restful-api-guidelines/\n[info] 235 - DateTimePropertiesSuffixRule - SHOULD - Name date/time properties using the \"_at\" suffix - https://zalando.github.io/restful-api-guidelines/\n[info] 240 - UpperCaseEnums - SHOULD - Declare enum values using UPPER_SNAKE_CASE format - https://zalando.github.io/restful-api-guidelines/\n[info] \n[info] Skipped rules (1)\n[info] -----------------\n[info] 174 - CommonFieldTypesRule - MUST - Use common field names\n[info] \n[info] Rule violations (26)\n[info] --------------------\n[warn] 219 - MUST - ApiAudienceRule - API Audience must be provided - /info/x-audience\n[warn] 215 - MUST - ApiIdentifierRule - API Identifier should be provided - /info/x-api-id\n[warn] 218 - MUST - ApiMetaInformationRule - Contact URL has to be provided - /info/contact/url\n[warn] 218 - MUST - ApiMetaInformationRule - Contact e-mail has to be provided - /info/contact/email\n[warn] 218 - MUST - ApiMetaInformationRule - Description has to be provided - /info/description\n[warn] 218 - MUST - ApiMetaInformationRule - Contact name has to be provided - /info/contact/name\n[warn] 224 - MUST - FunctionalNamingForHostnamesRule - API audience null is not supported. - /info\n[warn] 115 - MUST - NoVersionInUriRule - URL contains version number - /servers/0\n[warn] 183 - MUST - ProprietaryHeadersRule - use only standardized or specified response headers - /paths/~1pets/get/responses/200/headers/x-next\n[warn] 104 - MUST - SecureAllEndpointsRule - API must be secured by OAuth2 or Bearer Authentication - /components/securitySchemes\n[warn] 105 - MUST - SecureAllEndpointsWithScopesRule - Endpoint is not secured by scope(s) - /paths/~1orders~1{orderId}/put\n[warn] 105 - MUST - SecureAllEndpointsWithScopesRule - Endpoint is not secured by scope(s) - /paths/~1pets/get\n[warn] 105 - MUST - SecureAllEndpointsWithScopesRule - Endpoint is not secured by scope(s) - /paths/~1pets/post\n[warn] 105 - MUST - SecureAllEndpointsWithScopesRule - Endpoint is not secured by scope(s) - /paths/~1pets~1{petId}/get\n[warn] 118 - MUST - SnakeCaseInPropNameRule - Property name has to be snake_case - /components/schemas/Error/properties/messageA\n[warn] 110 - MUST - SuccessResponseAsJsonObjectRule - Always return JSON objects as top-level data structures to support extensibility - /components/schemas/Pets\n[warn] 176 - MUST - UseProblemJsonRule - Operations should return problem JSON when any problem occurs during processing whether caused by client or server. Media type have to be 'application/problem+json' - /paths/~1pets/get/responses/default/content/application~1json\n[warn] 176 - MUST - UseProblemJsonRule - Operations should return problem JSON when any problem occurs during processing whether caused by client or server. Media type have to be 'application/problem+json' - /paths/~1pets/post/responses/default/content/application~1json\n[warn] 176 - MUST - UseProblemJsonRule - Operations should return problem JSON when any problem occurs during processing whether caused by client or server. Media type have to be 'application/problem+json' - /paths/~1pets~1{petId}/get/responses/default/content/application~1json\n[warn] 224 - SHOULD - FunctionalNamingForHostnamesRule - API audience null is not supported. - /info\n[warn] 151 - SHOULD - JsonProblemAsDefaultResponseRule - operation should contain the default response - /paths/~1orders~1{orderId}/put\n[warn] 151 - SHOULD - JsonProblemAsDefaultResponseRule - problem+json should be used as default response - /paths/~1pets/get/responses/default/content/application~1json\n[warn] 151 - SHOULD - JsonProblemAsDefaultResponseRule - problem+json should be used as default response - /paths/~1pets/post/responses/default/content/application~1json\n[warn] 151 - SHOULD - JsonProblemAsDefaultResponseRule - problem+json should be used as default response - /paths/~1pets~1{petId}/get/responses/default/content/application~1json\n[warn] 132 - SHOULD - PascalCaseHttpHeadersRule - Header has to be Hyphenated-Pascal-Case - /paths/~1pets/get/responses/200/headers/x-next\n[warn] 224 - MAY - FunctionalNamingForHostnamesRule - API audience null is not supported. - /info\n[info] \n[info] Writing result file to /tmp/zally-maven-plugin9175458596507981917.yaml\n[info] \n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethlo%2Fzally-maven-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fethlo%2Fzally-maven-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethlo%2Fzally-maven-plugin/lists"}