Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add an AsyncAPI poster showing all features at a glance #425

Closed
smoya opened this issue Oct 12, 2021 · 46 comments
Closed

Add an AsyncAPI poster showing all features at a glance #425

smoya opened this issue Oct 12, 2021 · 46 comments
Assignees
Labels
bounty AsyncAPI Bounty program related label enhancement

Comments

@smoya
Copy link
Member

smoya commented Oct 12, 2021

Reason/Context

I noticed people from serverlessworkflow.io have a poster image where they show all their features at a glance.
It seems like a cheat sheet but it's more like a "here is all you can do". See https://serverlessworkflow.io/img/sw-poster.png.

I believe creating one for AsyncAPI will help potential users to quickly see and show all the things AsyncAPI can do for them, meaning adoption could be easier.
Of course it can also be used as a small reference guide (even though it is not a cheat-sheet) to refresh developers knowledge.

As a user, those are few examples of questions the poster might answer to me:

  • What are the things I can define in my AsyncAPI file?
  • Are all the main protocols used at my company supported?
  • What tooling do I have available?
  • Can I generate nice documentation from my AsyncAPI file?
  • Is there any IDE extension such as VSCode one?
  • Can I generate code from my AsyncAPI file?

Description

  • Create a visual poster. Can have several formats. Downloadables usually are pdf, but embeddable could be svg and/or png.
  • Embed the poster into our website. TBD where.
@quetzalliwrites
Copy link
Member

I love this idea and I am excited to see what others think this poster should include.

@derberg
Copy link
Member

derberg commented Oct 13, 2021

for me these are always like a good cheat sheet, so highlighting all features:

  • bindings aka protocol agnostic
  • different payload schemas support (no need for json schema, you can use avro)
  • JSON $ref feature for reusability
  • Traits
  • example of usage with CloudEvents?
  • why not example of usage with SererlessWorkflow?

and also:

  • community channels where people can enage
  • some cool core tools (modelina, generator, glee, others?)
  • meetings calendar

Anythink I'm missing?

Might be we need 2 posters, one for AsyncAPI Specification, one for AsyncAPI tools, or event one more for AsyncAPI Initiative where we talk separately about the community 🤔

@boyney123
Copy link
Contributor

Yeah think the idea is great.

Think we might also want to include the basics, or have two files maybe?

Things I would like to see (if never seen AsyncAPI):

  • Operations
  • Channels
  • Event examples
  • Application info
  • etc

Maybe an intro into AsyncAPI cheatsheet too?

@github-actions
Copy link

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

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 ❤️

@github-actions github-actions bot added the stale label Feb 11, 2022
@smoya
Copy link
Member Author

smoya commented Feb 11, 2022

I think this is still relevant! I can't remove the stale label btw!

@github-actions github-actions bot removed the stale label Feb 12, 2022
@github-actions
Copy link

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

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 ❤️

@github-actions github-actions bot added the stale label Jun 13, 2022
@smoya
Copy link
Member Author

smoya commented Jun 13, 2022

This didn't have enough traction. Not sure if its still relevant.

@github-actions
Copy link

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

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 ❤️

@github-actions github-actions bot added the stale label Oct 12, 2022
@smoya
Copy link
Member Author

smoya commented Oct 12, 2022

I still think this can be useful but to be honest, after a year, not sure if this is gonna happen.

Do you still consider it something we wanna do?
cc @Mayaleeeee @derberg @alequetzalli @fmvilas

@derberg
Copy link
Member

derberg commented Oct 12, 2022

I also think it is useful, not only a poster, kind of infographic too. We just need someone talented who could design it. And all of us can help defining what content should go there

@Mayaleeeee
Copy link
Member

Mayaleeeee commented Oct 12, 2022

I really like the idea and would have wanted to take it on, but I'm concentrating on a mentorship program this month, so I won't have time to work on it at the moment @smoya. If it's still open by next month, though, I'll fo for it 🥰🥰😌.

@github-actions github-actions bot removed the stale label Oct 13, 2022
@github-actions
Copy link

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

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 ❤️

@github-actions github-actions bot added the stale label Apr 15, 2023
@derberg
Copy link
Member

derberg commented Apr 17, 2023

@Mayaleeeee first someone need to specify the content, and then the poster could be worked on.

Maybe check in slack, in #specification channel, maybe someone would like to help, maybe in #docs ?

@github-actions github-actions bot removed the stale label Apr 18, 2023
@Mayaleeeee
Copy link
Member

Thanks @derberg
I will do that

@Miracle56u
Copy link

Hi, I'd love to work on this project, I'm interested in this issue and would love to collaborate with anyone interested too

Copy link
Member

derberg commented Jul 19, 2023

@Miracle56u hey, thanks What brings you here? what skills you put on the table? design or? cause this task has 2 challenges: define content + define design

@Miracle56u
Copy link

@derberg we had a meeting two days ago and this project was discussed, and I developed interest for the project to bring my design skill to the table, even though I'll yet need further clarity and understanding of the project.

Copy link
Member

derberg commented Jul 20, 2023

awesome, here are some of the examples of such "posters" (more like a cheatsheets)

oh looks like there is a whole service about it https://cheatography.com/

anyway, we need content, and it is not easy to provide, my only idea is that we need to hope on a call, do brainstorming and come up with something.

@smoya thoughts?

@Mayaleeeee
Copy link
Member

Hi, I'd love to work on this project, I'm interested in this issue and would love to collaborate with anyone interested too

Thanks, Miracle.
You can go ahead with it; please don't hesitate to ask if you need help.

@Miracle56u
Copy link

Thanks Mayaleeeee!
Your help will surely be necessary

@Miracle56u
Copy link

Okay @derberg
That'll be great

@derberg
Copy link
Member

derberg commented Sep 6, 2023

Cheat Sheet Subjects:

  • AsyncAPI Specification
    • Broad overview of all root element with visual representation of file
    • Features like:
  • Working with AsyncAPI
    • CLI
    • Studio
    • VSCode + IntelliJ
  • AsyncAPI Case studies (tools)

So we think on online and printable version. We just need to remember that they are easy to edit, sources are in markdown or something similar.


Cheat sheets could have a QR code that takes you to online version of the cheat sheet - cool for people that use printed version.

@derberg
Copy link
Member

derberg commented Mar 13, 2024

ok then, lets do MVP with bounty support:

scope:

  • drive discussion to gather content, organize meeting or anything else that will enable content production
  • create a visual cheat sheet, can be png or whatever
  • we do a simple cheat sheet only about spec and its features: feature name, intro and sample snippet

out of scope:
putting it on website. I think we first need to see outcome of MVP, so how it looks like and later with good first issue someone can embed the picture on the website, or maybe we will need some larger discussion with documentation contributors for more complex approach. So yeah, lets not complicate to much or we will never do it 😄

I know @Mayaleeeee is very much motivated to do it, including driving discussion - so let us use the opportunity that we have website maintainer wanting to do the job

@asyncapi-bot asyncapi-bot added the bounty AsyncAPI Bounty program related label label Mar 18, 2024
@aeworxet
Copy link
Contributor

Bounty Issue's service comment

Text labels: bounty/2024-Q2, bounty/advanced, bounty/design
First assignment to third-party contributors: 2024-03-22 00:00:00 UTC+12:00
End Of Life: 2024-08-31 23:59:59 UTC-12:00

@asyncapi/bounty_team

@Mayaleeeee
Copy link
Member

ok then, lets do MVP with bounty support:

scope:

  • drive discussion to gather content, organize meeting or anything else that will enable content production
  • create a visual cheat sheet, can be png or whatever
  • we do a simple cheat sheet only about spec and its features: feature name, intro and sample snippet

out of scope: putting it on website. I think we first need to see outcome of MVP, so how it looks like and later with good first issue someone can embed the picture on the website, or maybe we will need some larger discussion with documentation contributors for more complex approach. So yeah, lets not complicate to much or we will never do it 😄

I know @Mayaleeeee is very much motivated to do it, including driving discussion - so let us use the opportunity that we have website maintainer wanting to do the job

Yes, I am.
Thank you @derberg

@derberg
Copy link
Member

derberg commented Mar 20, 2024

@Mayaleeeee you are now officially assigned for the work. Super excited about this bounty issue 🚀

@aeworxet
Copy link
Contributor

Bounty Issue's Timeline

Complexity Level Assignment date (by GitHub) Start date (by BP rules) End date (by BP rules) Draft PR submission Final PR submission Final PR merge
Advanced 2024-03-20 2024-04-01 2024-05-24 2024-04-19 2024-05-10 2024-05-24
Please note that the dates given represent deadlines, not specific dates, so if the goal is reached sooner, it's better.

@derberg
Copy link
Member

derberg commented Apr 3, 2024

Core

  • Somehow visually show that AsyncAPI document can be used to describe any server API, including broker
  • AsyncAPI is protocol agnostic - supports any protocol like MQTT, Kafka, AMQP, HTTP just to name few
  • AsyncAPI can be represented as YAML or JSON

Features:

Binding

channels:
  userSignedUp:
    description: This channel contains a message per each user who signs up in our application.
    address: user_signedup
    messages:
      userSignedUp:
        $ref: '#/components/messages/userSignedUp'
    bindings:
      kafka:
        bindingVersion: '0.5.0'
        partitions: 10
        replicas: 2
        topicConfiguration:
          cleanup.policy: ["delete", "compact"]
          retention.ms: 604800000
          retention.bytes: 1000000000
          delete.retention.ms: 86400000
          max.message.bytes: 1048588

Multi Format Schema

Default is AsyncAPI Schema. AsyncAPI Schema is a superset of JSON Schema Draft 7 which basically means AsyncAPI Schema is the same as JSON Schema plus some additional features.

components:
  schemas:
    userSignedUp:
        type: object
        properties:
          userId:
            type: integer
            description: This property describes the id of the user
          userEmail:
            type: string
            description: This property describes the email of the user

You can use any other schema you want.

Avro example

components:
  schemas:
    userSignedUp:
      schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
      schema:
        type: record
        name: UserSignedUp
        namespace: com.company
        doc: User sign-up information
        fields:
          - name: userId
            type: int
          - name: userEmail
            type: string

Protobuf example

components:
  schemas:
    userSignedUp:
      schemaFormat: 'application/vnd.google.protobuf;version=3'
      schema: |
         message UserSignedUp {
             int32 user_id = 1;
             string user_email = 2;
         }

and make it clear that there are also other schema formats, not just protobuf or avro, that can be used

Extensions

way to extend standard AsyncAPI spec with additional fields

asyncapi: 3.0.0
info:
  title: Cool Example
  version: 0.1.0
  x-linkedin: '/company/asyncapi' 

Reusability

Reusability inside single AsyncAPI document
components:
  messages:
    UserSignedUp:
      payload:
        $ref: '#/components/schemas/UserSignedUp'
  schemas:
    UserSignedUp:
        type: object
        properties:
          displayName:
            type: string
            description: Name of the user
          email:
            type: string
            format: email
            description: Email of the user
Reusability outside document, pointing to a file
components:
  messages:
    UserSignedUp:
      payload:
        $ref: '#/components/schemas/UserSignedUp'
  schemas:
    UserSignedUp:
        $ref: './userSchema.json'
Reusability outside document, pointing to URL
components:
  messages:
    UserSignedUp:
      payload:
        $ref: '#/components/schemas/UserSignedUp'
  schemas:
    UserSignedUp:
        $ref: http://localhost:8080/apis/registry/v2/groups/my-group/artifacts/UserSignedUp
Traits

tbc

@derberg
Copy link
Member

derberg commented Apr 3, 2024

recording of meeting: https://www.youtube.com/watch?v=6lVMY_Fc0Vs

@Mayaleeeee
Copy link
Member

Core

  • Somehow visually show that AsyncAPI document can be used to describe any server API, including broker
  • AsyncAPI is protocol agnostic - supports any protocol like MQTT, Kafka, AMQP, HTTP just to name few
  • AsyncAPI can be represented as YAML or JSON

Features:

Binding

channels:
  userSignedUp:
    description: This channel contains a message per each user who signs up in our application.
    address: user_signedup
    messages:
      userSignedUp:
        $ref: '#/components/messages/userSignedUp'
    bindings:
      kafka:
        bindingVersion: '0.5.0'
        partitions: 10
        replicas: 2
        topicConfiguration:
          cleanup.policy: ["delete", "compact"]
          retention.ms: 604800000
          retention.bytes: 1000000000
          delete.retention.ms: 86400000
          max.message.bytes: 1048588

Multi Format Schema

Default is AsyncAPI Schema. AsyncAPI Schema is a superset of JSON Schema Draft 7 which basically means AsyncAPI Schema is the same as JSON Schema plus some additional features.

components:
  schemas:
    userSignedUp:
        type: object
        properties:
          userId:
            type: integer
            description: This property describes the id of the user
          userEmail:
            type: string
            description: This property describes the email of the user

You can use any other schema you want.

Avro example

components:
  schemas:
    userSignedUp:
      schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
      schema:
        type: record
        name: UserSignedUp
        namespace: com.company
        doc: User sign-up information
        fields:
          - name: userId
            type: int
          - name: userEmail
            type: string

Protobuf example

components:
  schemas:
    userSignedUp:
      schemaFormat: 'application/vnd.google.protobuf;version=3'
      schema: |
         message UserSignedUp {
             int32 user_id = 1;
             string user_email = 2;
         }

and make it clear that there are also other schema formats, not just protobuf or avro, that can be used

Extensions

way to extend standard AsyncAPI spec with additional fields

asyncapi: 3.0.0
info:
  title: Cool Example
  version: 0.1.0
  x-linkedin: '/company/asyncapi' 

Reusability

Reusability inside single AsyncAPI document
components:
  messages:
    UserSignedUp:
      payload:
        $ref: '#/components/schemas/UserSignedUp'
  schemas:
    UserSignedUp:
        type: object
        properties:
          displayName:
            type: string
            description: Name of the user
          email:
            type: string
            format: email
            description: Email of the user
Reusability outside document, pointing to a file
components:
  messages:
    UserSignedUp:
      payload:
        $ref: '#/components/schemas/UserSignedUp'
  schemas:
    UserSignedUp:
        $ref: './userSchema.json'
Reusability outside document, pointing to URL
components:
  messages:
    UserSignedUp:
      payload:
        $ref: '#/components/schemas/UserSignedUp'
  schemas:
    UserSignedUp:
        $ref: http://localhost:8080/apis/registry/v2/groups/my-group/artifacts/UserSignedUp
Traits

tbc

Thanks a lot! @derberg

Your explanation was great.

@Mayaleeeee
Copy link
Member

Mayaleeeee commented Apr 10, 2024

Project Progress Overview: Weeks 1-2 Update

Hello everyone!

During the first and second weeks, I focused on learning about cheat sheet design, including the best approaches for creating a user-friendly cheat sheet poster.

In the first week, I had a livestream meeting with Lukasz where we discussed the cheat sheet and how to approach it. You can find the link to the meeting here.

Here are some of the examples Lukasz mention and I have been exploring.

https://media.cheatography.com/storage/thumb/hulj_nginx-config.750.jpg
https://intellipaat.com/blog/wp-content/uploads/2022/10/KUBERNETES-Cheat-Sheet-2022.jpg
https://media.cheatography.com/storage/thumb/gaston_json.750.jpg

https://cheatography.com/

For next week: 15/04/2024 - 19/04/2024

I'd like to take the week off for my final exams and would return next week to start working on the design.

cc @aeworxet

Thank you, and have a great day!

@aeworxet
Copy link
Contributor

Upon request of the Bounty Program Participant (@Mayaleeeee), the Bounty Issue's Timeline is extended.

Bounty Issue's Timeline Extended

Complexity Level Assignment date (by GitHub) Start date (by BP rules) End date (by BP rules) Draft PR submission Final PR submission Final PR merge
Advanced 2024-03-20 2024-04-01 2024-05-31 2024-04-26 2024-05-17 2024-05-31
Please note that the dates given represent deadlines, not specific dates, so if the goal is reached sooner, it's better.
Keep in mind the responsibility for violations of the Timeline.

@Mayaleeeee
Copy link
Member

Mayaleeeee commented Apr 29, 2024

Project Progress Overview: Week 4 Update

After analyzing the discussion on the content for the AsyncAPI Cheat Sheet, I designed a layout that best captures all of our ideas and suggestions.

You can easily access the design below 👇🏾 or via this Figma link.

cc @derberg

AsyncAPI Cheat Sheet

Copy link
Member

derberg commented Apr 29, 2024

Hey, nice first version! Could it be that binding examples are on one side and schemas on the other? and extensions and reusability in middle? as now it is a bit chaotic.

there are some errors in yaml examples, but these are like "grammar" issues we can deal at the end. Take into account that we could print it as brochure, 2 sided, so bindings and multi schema examples, can be all on the other side, and on first side he can put basics

@Mayaleeeee
Copy link
Member

Hey, nice first version! Could it be that binding examples are on one side and schemas on the other? and extensions and reusability in middle? as now it is a bit chaotic.

there are some errors in yaml examples, but these are like "grammar" issues we can deal at the end. Take into account that we could print it as brochure, 2 sided, so bindings and multi schema examples, can be all on the other side, and on first side he can put basics

Alright. I'll do that and come up with something.

Thanks for the feedback.

@Mayaleeeee
Copy link
Member

Mayaleeeee commented Apr 30, 2024

Hi @derberg these are the YAML snippets you requested.

Protocol Bindings

Binding - Channels

channels:
  userSignedUp:
    description: This channel contains a message per each user who signs up in our application.
    address: user_signedup
    messages:
      userSignedUp:
        $ref: '#/components/messages/userSignedUp'
    bindings:
      kafka:
        bindingVersion: '0.5.0'
        partitions: 10
        replicas: 2
        topicConfiguration:
          cleanup.policy: ["delete", "compact"]
          retention.ms: 604800000
          retention.bytes: 1000000000
          delete.retention.ms: 86400000
          max.message.bytes: 1048588

Binding - Operations

operations:
  onUserSignedUp:
    action: receive
    channel:
      $ref: '#/channels/userSignedUp'
    bindings:
      kafka:
        bindingVersion: '0.5.0'
        groupId:
          type: string
          enum: ['myGroupId']
        clientId:
          type: string
          enum: ['myClientId']

Binding - Message

components:
  messages:
    userSignedUp:
      bindings:
        kafka:
            key:
              type: string
              enum: ['myKey']
            schemaIdLocation: 'payload'
            schemaIdPayloadEncoding: 'apicurio-new'
            schemaLookupStrategy: 'TopicIdStrategy'
            bindingVersion: '0.5.0'
      payload:
        schemaFormat: 'application/vnd.apache.avro+json;version=1.9.0'
        schema:
          $ref: http://localhost:8080/apis/registry/v2/groups/my-group/artifacts/UserSignedUp

Binding - Server

servers:
  kafkaServer:
    host: test.mykafkacluster.org:8092
    description: Kafka Server
    protocol: kafka
    bindings:
      kafka:
        schemaRegistryUrl: 'http://localhost:8080/apis/registry/'
        schemaRegistryVendor: 'apicurio'
        bindingVersion: '0.5.0'

Multi Format Schema

Default - AsyncAPI Schema

components:
    schemas:
        userSignedUp:
                type: object
              properties:
                 userId:
                     type: integer
                     description: This property describes the id of the user
                 userEmail:
                      type: string
                      description: This property describes the email of the user

Avro Example

components:  
        schemas:     
            userSignedUp:       
                 schemaFormat: 'application/vnd.apache.avro;version=1.9.0'          
                  schema:         
                     type: record         
                     name: UserSignedUp              
                     namespace: com.company
                     doc: User sign-up information             
                     fields:           
                       - name: userId             
                       type: int           
                       - name: userEmail 
                       type: string

Protobuf

   components:  
        schemas:     
            userSignedUp:       
                 schemaFormat: 'application/vnd.google.protobuf;version=3'          
                  schema:  |    
                        message UserSignedUp {                 
                                 int32 user_id = 1;                             
                                 string user_email = 2;         
                        }  

Reusability

Single document

components:
messages:
 UserSignedUp:
   payload:
     $ref: '#/components/schemas/UserSignedUp'
schemas:
 UserSignedUp:
     type: object
     properties:
       displayName:
         type: string
         description: Name of the user
       email:
         type: string
         format: email
         description: Email of the user
             

URL

components:
  messages:
    UserSignedUp:
      payload:
        $ref: '#/components/schemas/UserSignedUp'
  schemas:
    UserSignedUp:
        $ref: http://localhost:8080/apis/registry/v2/groups/my-group/artifacts/UserSignedUp

To a file

   components:
       messages:
             UserSignedUp:
                  payload:
                  $ref: '#/components/schemas/UserSignedUp'
       schemas:
           UserSignedUp:
                       $ref: './userSchema.json'

Extension

asyncapi: 3.0.0
info:
  title: Cool Example
  version: 0.1.0
  x-linkedin: '/company/asyncapi' 

@derberg
Copy link
Member

derberg commented Apr 30, 2024

Ok, so we should have a poster on two A4 pages, so we can print it on one card

page 1 - should be basic explanation and core features
page 2 - extra features, basically bindings and schemas

so, Page 1

About AsyncAPI

Fixed content:

- It is an open source specification that makes it easier to work with even-driven architectures by helping with design, documentation and managing of asynchronous APIs,
- It is protocol agnostic and you can use it with protocols like MQTT, Kafka, AMQP, WebSocket, just to name few
- It can be represented with machine-readable formats like YAML and JSON

Please try instead of one box with above text, have them all shared in a context of a picture:

  • first bullet point can be a text for a picture you suggest, that shows AsyncAPI can be used to describe producer, consumer and broker
  • second bullet point can be a text for a picture where you show AsyncAPI surrounded by different protocols
  • third bullet point can be a text for a new picture. It can show a dummy YAML, with basic AsyncAPI structure, where technical details are redacted or blurred. Quick idea below, so you see, just show very basic, no tech details, but still basic YAML structure is something you see immediately
    IMG_20240430_160928

Features

I think we can get rid of the box and provide texts in context, where example YAML samples are

- Bindings - additional protocol-specific information you can add to AsyncAPI document
- Multi Format Schema - by default you can use AsyncAPI Schema that is a superset of JSON Schema Draft 7. Multi format allows you to use other formats, like OpenAPI Schema, Apache Avro, Protobuf and others.
- Extensions - with x- prefix you can add additional fields to AsyncAPI documents to fulfil your specific use cases
- Reusability - you can reuse all parts of AsyncAPI, within one document or by pointing to external resources, separate files or servers that for example can host schemas.

because of the amount of snippets for bindings + multiformat + reusability make sure they end up in Page 2 with above descriptions.

in case of MultiFormat - the visual with JSON and AsyncAPI Schema is not helping much so we can remove it imho

so on Page 1 I guess only extensions would stay 🤔

and if because of all above, we get a bit more space to occupy on Page 1, we could maybe place QR codes that would point to Studio and CLI to promote them as core tools to work with AsyncAPI?


Fixed snippets

Protocol Bindings

Binding - Channels

channels:
  userSignedUp:
    address: user_signedup
    messages:
      userSignedUp:
        $ref: '#/components/messages/userSignedUp'
    bindings:
      kafka:
        bindingVersion: '0.5.0'
        partitions: 10
        replicas: 2
        topicConfiguration:
          cleanup.policy: ["delete", "compact"]

Binding - Operations

operations:
  userSignup:
    action: receive
    channel:
      $ref: '#/channels/userSignedUp'
    bindings:
      mqtt:
        qos: 2
        retain: true
        bindingVersion: 0.2.0

Binding - Message

components:
  messages:
    userSignedUp:
      payload:
        $ref: '#/components/schemas/userSignedUp'
      bindings:
        amqp:
        contentEncoding: gzip
        messageType: 'user.signup'
        bindingVersion: 0.3.0

Binding - Server

servers:
  production:
    bindings:
      pulsar:
        tenant: contoso
        bindingVersion: '0.1.0'

Multi Format Schema

Default - AsyncAPI Schema

components:
  schemas:
    userSignedUp:
      type: object
      properties:
        userId:
          type: integer
          description: This property describes the id of the user
        userEmail:
          type: string
          description: This property describes the email of the user

Avro Example

components:  
  schemas:     
    userSignedUp:       
      schemaFormat: 'application/vnd.apache.avro;version=1.9.0'          
      schema:         
       type: record         
       name: UserSignedUp              
       namespace: com.company
       doc: User sign-up information             
       fields:           
         - name: userId             
           type: int           
         - name: userEmail 
           type: string

Protobuf

components:  
  schemas:     
    userSignedUp:       
      schemaFormat: 'application/vnd.google.protobuf;version=3'          
      schema: |    
          message UserSignedUp {                 
            required int32 user_id = 1;                             
            optional string user_email = 2;         
          }  

Reusability

Single document

components:
  messages:
    UserSignedUp:
      payload:
        $ref: '#/components/schemas/UserSignedUp'
  schemas:
    UserSignedUp:
      type: object
      properties:
        displayName:
          type: string
          description: Name of the user
        email:
          type: string
          format: email
          description: Email of the user
                

URL

components:
  messages:
    UserSignedUp:
      payload:
        $ref: '#/components/schemas/UserSignedUp'
  schemas:
    UserSignedUp:
        $ref: http://localhost:8080/apis/registry/v2/groups/my-group/artifacts/UserSignedUp

To a file

components:
  messages:
    UserSignedUp:
      payload:
        $ref: '#/components/schemas/UserSignedUp'
  schemas:
    UserSignedUp:
      $ref: './userSchema.json'

Extension

asyncapi: 3.0.0
info:
  title: Cool Example
  version: 0.1.0
  x-linkedin: 'https://www.linkedin.com/company/asyncapi' 

@Mayaleeeee
Copy link
Member

- It can be represented with machine-readable formats like YAML and JSON

Based on the explanation above, this is the design I was able to come up with. @derberg
New_CS

@Mayaleeeee
Copy link
Member

Project Update

Hello, everyone; here's an update on the cheat sheet design I've been working on. Throughout last week, I updated the design according to Lukasz's suggestions, and here's where we are currently at. cc @derberg @aeworxet

CS_H (1)
CS_2 (1)

@derberg
Copy link
Member

derberg commented May 14, 2024

I marked with red parts that are missing indent, or indent is barely visible with bare eye

also marked one place where wrong part is bold

Screenshot 2024-05-14 at 08 54 38

@Mayaleeeee
Copy link
Member

Mayaleeeee commented May 20, 2024

Project Update - Final design approved by Lukasz

Last week, I made further updates to the cheat sheet based on Lukasz's suggestions. Here is the final design in different formats. cc @derberg @aeworxet

Copy link
Member

derberg commented May 21, 2024

can't wait to get it print out and share with people at APIDays Helsinki

@derberg
Copy link
Member

derberg commented May 24, 2024

work completed

also 200 copies for APIDays Helsinki printed.

IMG_20240524_111309
IMG_20240524_111302

some followup work will be done in #2982

and any improvements to current design, I'll create issues whenever there is some feedback from any event

@smoya thanks for suggesting this topic

@Mayaleeeee huge thanks for great execution

@derberg derberg closed this as completed May 24, 2024
@aeworxet
Copy link
Contributor

Bounty Issue Completed 🎉

@Mayaleeeee, please go to the AsyncAPI page on Open Collective and submit an invoice for USD 400.00 with the expense title Bounty website#425, tag bounty, and full URL of this Bounty Issue in the description.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bounty AsyncAPI Bounty program related label enhancement
Projects
Status: Completed
Development

No branches or pull requests

9 participants