asyncapi / spec

The AsyncAPI specification allows you to create machine-readable definitions of your asynchronous APIs.
https://www.asyncapi.com
Apache License 2.0
4.1k stars 261 forks source link

v3 introduces some regression if it comes to `parameters` description #979

Open derberg opened 10 months ago

derberg commented 10 months ago

In short, no more JSON schema for parameters in v3 -> https://github.com/asyncapi/spec/blob/next-major-spec/spec/asyncapi.md#user-content-parameter-object

But I just discovered one example that actually uses pattern keyword from JSON schema -> https://github.com/asyncapi/spec/blob/master/examples/rpc-client.yml#L21

I think that the impact is small, will not affect adoption and it is completely fine if we add it v3.1

But I want to make sure other codeowners don't see a problem

cc codeowners @fmvilas @dalelane @smoya @char0n

fyi @jonaslagoni

fmvilas commented 10 months ago

Yeah, can be added in v3.1.

smoya commented 9 months ago

First, i want to say thanks @derberg for catching this 🙌🙌.

Now, it is not something that I see in a production use cases

I'm completely not sure about this statement to be true. I can share a valid use case where SRE department could share just one asyncapi.yaml file with each team who owns channels (lets say rabbitmq or kafka topics) but not documenting all of them one by one but rather using a pattern in the address. I.e. ^team_a\\..+$ or similar pattern.

Having said that, I'm not pretty confident about this causing a low impact in case this feature is missing in v3.0.0.

Im not blocking but just want to know from you if you have sources to confirm this is a really edge case.

jonaslagoni commented 9 months ago

We have seen similar raised question on slack as well, where people where no longer able to define that the parameter for example should be an integer.

fmvilas commented 9 months ago

It's low impact because it's on 2.6.0. I mean, it's not that some people can't continue using AsyncAPI, it's just that they won't be able to adopt 3.0.0, which is ok. They can adopt 3.1.0, which can be released as soon as January 2024.

smoya commented 9 months ago

It's low impact because it's on 2.6.0. I mean, it's not that some people can't continue using AsyncAPI, it's just that they won't be able to adopt 3.0.0, which is ok. They can adopt 3.1.0, which can be released as soon as January 2024.

Yes, that's clear enough I would say the only factor that makes me 👍 is that we are gonna add it in the very next minor version. I was asking, if by any chance, we know real use cases from companies that would be affected. Just to know the impact a bit better.

Another topic is the generator-js. It would be awesome to throw some warnings when a parameter from v2 is not supported in v3. However, I do not see we do that atm, we do not log any line or return some diagnostics but rather the transformed doc. Can we maybe add somewhere some logic that adds a commented line in the final document for each unsupported parameter saying this will be or not supported soon? cc @jonaslagoni

jonaslagoni commented 9 months ago

Another topic is the generator-js. It would be awesome to throw some warnings when a parameter from v2 is not supported in v3. However, I do not see we do that atm, we do not log any line or return some diagnostics but rather the transformed doc. Can we maybe add somewhere some logic that adds a commented line in the final document for each unsupported parameter saying this will be or not supported soon? cc @jonaslagoni

Do you mean the converter? If so, we already do give the user information about this in the form of a warning 🙂

derberg commented 9 months ago

Now, it is not something that I see in a production use cases, just one of our examples

@smoya I mean't I haven't seen any production-used asyncapi document that would use pattern. I just noticed we have it in one of our examples. This is why I agree to not push to solve this regression in 3.0

Can we maybe add somewhere some logic that adds a commented line in the final document for each unsupported parameter saying this will be or not supported soon? cc @jonaslagoni

@smoya what you mention is addressed in https://github.com/asyncapi/converter-js/pull/192 by @jonaslagoni

@jonaslagoni did you remember to add it to migration guide?

jonaslagoni commented 9 months ago

@jonaslagoni did you remember to add it to migration guide?

@derberg doing it today yea 👍

GreenRover commented 7 months ago

+1

github-actions[bot] commented 3 months ago

This issue has been automatically marked as stale because it has not had recent activity :sleeping:

It will be closed in 120 days if no further activity occurs. To unstale this issue, add a comment with a detailed explanation.

There can be many reasons why some specific issue has no activity. The most probable cause is lack of time, not lack of interest. AsyncAPI Initiative is a Linux Foundation project not owned by a single for-profit company. It is a community-driven initiative ruled under open governance model.

Let us figure out together how to push this issue forward. Connect with us through one of many communication channels we established here.

Thank you for your patience :heart:

ly29 commented 3 months ago

Just to chime in that we use patters for various parameters that are more open in our channel (topic) structure. No being able to document them is regression. 2.6.0 works fine but yes it is used in production.

SebastienGllmt commented 3 weeks ago

Even if the parameter are all strings in practice for codegen simplicity, it would be good to at least have some kind of docHint field where you can specify the full type

example

parameters:
    streetlightId:
        docHint:
            type: integer

This would allow you to keep enforcing only strings for the parameters, but allow more complex types in tools like the AsyncApi Studio