Skip to content

Latest commit

 

History

History
165 lines (129 loc) · 5.69 KB

File metadata and controls

165 lines (129 loc) · 5.69 KB

What is API

It's like a humans conversation interface, but for the digital world.

At my previous company, we were talking about few Java developers that they have a "heavy interface" -> meaning "they are not most communicative, and close to a cave man"

  • Do you like when people call you Mr/Mrs/Miss/Sir?
  • What is your pronoun?
  • Do you care about your titles, should we say doctor or professor
  • Are you in the mood for a talk?
  • Do you like to start with small talk?

Wouldn't it be nice to have it documented and publicly available? Oh wait -> Solid Project

Sync vs Async

What is a Protocol

Good real-life example is the dyplomatic protocol

  • New mission establishment
  • Credentials handover
  • Appointing new representatives

Example protocol implementation is the United Nations manual of protocol.

On technical side: It is a set of rules that describe how information is transmited.

HTTP protocol on example of AsyncAPI website :

Specifications

Event Driven Architecture (EDA)

Q: Why do you do event-driven API, is REST API not enough?

A1: Because I want to know what is happening in real-time without asking for an update constantly.

OR

A2: When you send a message, and definitely do not expect a response.

there are many other patterns: Messaging Patterns

EDA is pretty old

Just look at the browser and mouseover event:

=>

Microservices brought event-driven into renesance. Serverless puts it to the moon.

EDA protocols

amqp, http, ibmmq, jms, kafka, anypointmq, mqtt, solace, stomp, websocket, mercure

EDA Docs

  • Most complex to document because of different protocols
  • Not widely visible as REST API
  • APITracker - 7 AsyncAPI examples...
  • REMEMBER: spec is not all you need

EDA Setup - Simplified

These two perspectives cause some headache in AsyncAPI

  • Clients & Server
    graph TD
      server1[Server -> ws://flypoland.pl/travel/status]
      user1[Client -> Browser]
      user1 --> server1
      user2[Client -> Mobile]
      user2 --> server1
    

  • Producers, consumers and message broker in the middle -> fire and forget
    Step 1
    graph TD
      NotificationSubscribeUI[Subscribe-Me-For-Flight-Status UI]
      NotificationSubscribeUI -- HTTP POST --> FlightSubscriberService
    
    Step 2
    graph TD
      server1{mqtt://flypoland.pl:1883}
      NotificationSubscribeUI[Subscribe-Me-For-Flight-Status UI]
      NotificationSubscribeUI -- HTTP POST --> FlightSubscriberService
      FlightSubscriberService[Flight Subscriber Service]
      FlightSubscriberService -- flight/queue --> server1
    
    Step 3
    graph TD
      server1{mqtt://flypoland.pl:1883}
      NotificationSubscribeUI[Subscribe-Me-For-Flight-Status UI]
      FlightMonitorService[Flight Monitor Service]
      NotificationSubscribeUI -- HTTP POST --> FlightSubscriberService
      FlightMonitorService -- flight/status --> server1
      FlightSubscriberService[Flight Subscriber Service]
      FlightSubscriberService -- flight/queue --> server1
      server1 -- flight/queue --> FlightMonitorService
    
    Step 4
    graph TD
      server1{mqtt://flypoland.pl:1883}
      NotificationSubscribeUI[Subscribe-Me-For-Flight-Status UI]
      FlightMonitorService[Flight Monitor Service]
      NotificationSubscribeUI -- HTTP POST --> FlightSubscriberService
      FlightMonitorService -- flight/status --> server1
      FlightNotifierService[User Notifier Service]
      server1 -- flight/status --> FlightNotifierService
      FlightSubscriberService[Flight Subscriber Service]
      FlightSubscriberService -- flight/queue --> server1
      server1 -- flight/queue --> FlightMonitorService
      SMSService[External SMS Service]
      FlightNotifierService -- HTTP POST --> SMSService
    
    Final
    graph TD
        NotificationSubscribeUI[Subscribe-Me-For-Flight-Status UI]
        NotificationSubscribeUI -- HTTP POST --> FlightSubscriberService
      subgraph EDA World
        FlightMonitorService[Flight Monitor Service]
        server1{mqtt://flypoland.pl:1883}
        FlightMonitorService -- flight/status --> server1
        FlightNotifierService[User Notifier Service]
        server1 -- flight/status --> FlightNotifierService
        FlightSubscriberService[Flight Subscriber Service]
        FlightSubscriberService -- flight/queue --> server1
        server1 -- flight/queue --> FlightMonitorService
      end
      SMSService[External SMS Service]
      FlightNotifierService -- HTTP POST --> SMSService