Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Wenn Schnittstellen alt werden... (JFS 2017)

Wenn Schnittstellen alt werden... (JFS 2017)

Folien zum Vortrag auf dem Java Forum Stuttgart 2017

Claus Straube

July 04, 2017
Tweet

More Decks by Claus Straube

Other Decks in Programming

Transcript

  1. A B Provider Consumer Request Response API API B kennt

    die Payload Struktur von A B kennt A B kennt die API Struktur von A
  2. A B Provider Consumer Request Response API API B kennt

    die Payload Struktur von A B kennt A B kennt die API Struktur von A
  3. https:// RESTBUCKS.io v2 order id / / /{ } POST

    = create order PATCH = update order DELETE = delete order GET = read order
  4. order Schritt 1 Request Response POST: RESTBUCKS.io/v2/order self GET: RESTBUCKS.io/v2/order/1

    RESTBUCKS.io/v2/order/{id} update_order POST/PATCH: RESTBUCKS.io/v2/order/1 RESTBUCKS.io/v2/order/{id} cancel_order DELETE: RESTBUCKS.io/v2/order/1 RESTBUCKS.io/v2/order/{id} pay_order PUT: RESTBUCKS.io/v2/order/1/payment RESTBUCKS.io/v2/order/{id}/payment
  5. order Schritt 1 Request Response POST: RESTBUCKS.io/v2/order self GET: RESTBUCKS.io/v2/order/1

    RESTBUCKS.io/v2/order/{id} update_order POST/PATCH: RESTBUCKS.io/v2/order/1 RESTBUCKS.io/v2/order/{id} cancel_order DELETE: RESTBUCKS.io/v2/order/1 RESTBUCKS.io/v2/order/{id} pay_order PUT: RESTBUCKS.io/v2/order/1/payment RESTBUCKS.io/v2/order/{id}/payment
  6. update order Schritt 2 Request Response PATCH: RESTBUCKS.io/v2/order/1 RESTBUCKS.io/v2/order/{id} self

    GET: RESTBUCKS.io/v2/order/1 RESTBUCKS.io/v2/order/{id} update_order POST/PATCH: RESTBUCKS.io/v2/order/1 RESTBUCKS.io/v2/order/{id} cancel_order DELETE: RESTBUCKS.io/v2/order/1 RESTBUCKS.io/v2/order/{id} pay_order PUT: RESTBUCKS.io/v2/order/1/payment RESTBUCKS.io/v2/order/{id}/payment
  7. A B Provider Consumer Request Response API API B kennt

    die Payload Struktur von A B kennt A B kennt die API Struktur von A
  8. order event update order event pay order event cancel order

    event prepare order event Schritt 1 Schritt 2 Schritt 3
  9. A B Provider Consumer API API Message Broker FooEvent Topic

    BarEvent Topic SomeEvent Topic FooEvent­Listener SomeEvent­Listener BarEvent­Listener SomeEvent­Listener
  10. A B Provider Consumer Request Response API API B kennt

    die Payload Struktur von A B kennt A B kennt die API Struktur von A
  11. Order Schema {JSON} V1.0 Order Schema {JSON} V1.0 Order Schema

    {JSON} V1.0 Order Schema {JSON} V1.0 Writer Reader
  12. [ { "namespace": "de.muenchen.jfs17", "type": "record", "name": "LineItem", "fields": [

    {"name": "name", "type": "string", "default": "coffee"}, {"name": "quantity", "type": "int", "default": "1"}, {"name": "milk", "type": "boolean", "default": "false"} ] }, { "namespace": "de.muenchen.jfs17", "type": "record", "name": "Order", "fields": [ {"name": "item", "type": "LineItem"} ] } ] Version 1.0
  13. [ { "namespace": "de.muenchen.jfs17", "type": "record", "name": "LineItem", "fields": [

    {"name": "name", "type": "string", "default": "coffee"}, {"name": "quantity", "type": "int", "default": "1"}, {"name": "milk", "type": "boolean", "default": "false"} ] }, { "namespace": "de.muenchen.jfs17", "type": "record", "name": "Order", "fields": [ {"name": "item", "type": "LineItem"} ] } ] LineItem Type Version 1.0
  14. [ { "namespace": "de.muenchen.jfs17", "type": "record", "name": "LineItem", "fields": [

    {"name": "name", "type": "string", "default": "coffee"}, {"name": "quantity", "type": "int", "default": "1"}, {"name": "milk", "type": "boolean", "default": "false"} ] }, { "namespace": "de.muenchen.jfs17", "type": "record", "name": "Order", "fields": [ {"name": "item", "type": "LineItem"} ] } ] Order Type Version 1.0
  15. Order Schema {JSON} V2.0 Order Schema {JSON} V2.0 Order Schema

    {JSON} V1.0 Order Schema {JSON} V1.0 Reader Writer
  16. [ { "namespace": "de.muenchen.jfs17", "type": "enum", "name": "Sizes", "symbols": ["LARGE",

    "MIDDLE", "SMALL"] }, { "namespace": "de.muenchen.jfs17", "type": "record", "name": "RechnungsPosten", "aliases": ["LineItem"], "fields": [ {"name": "name", "type": "string", "default": "coffee"}, {"name": "quantity", "type": "int", "default": "1"}, {"name": "milk", "type": "boolean", "default": "false"}, {"name": "size", "type": "Sizes", "default": "MIDDLE"} ] }, { "namespace": "de.muenchen.jfs17", "type": "record", "name": "Bestellung", "aliases": ["Order"], "fields": [ Version 2.0
  17. 1 gr. Kaffee ohne Milch 2 kl. Kaffee mit Milch

    Schema Server Order Schema {JSON} V2.0 Order Schema {JSON} V2.0 Order Schema {JSON} V1.0 Order Schema {JSON} V1.0
  18. Schema Server Order Schema {JSON} V2.0 Order Schema {JSON} V2.0

    Order Schema {JSON} V1.0 Order Schema {JSON} V1.0 Message Broker OrderEvent Topic A Message Converter B Message Converter
  19. Schema Server Order Schema {JSON} V2.0 Order Schema {JSON} V2.0

    Order Schema {JSON} V1.0 Order Schema {JSON} V1.0 A B Message Broker Message Converter Message Converter GET /{subject}/{format} GET /{subject}/{format} OrderEvent Topic
  20. Schema Server Order Schema {JSON} V2.0 Order Schema {JSON} V2.0

    Order Schema {JSON} V1.0 Order Schema {JSON} V1.0 A B Message Broker Message Converter Message Converter GET /{subject}/{format} GET /{subject}/{format} OrderEvent Topic Avro Message Avro Message
  21. Schema Server Order Schema {JSON} V2.0 Order Schema {JSON} V2.0

    Order Schema {JSON} V1.0 Order Schema {JSON} V1.0 A B Message Broker Message Converter Message Converter GET /{subject}/{format} GET /{subject}/{format} OrderEvent Topic Avro Message Avro Message https://cloud.spring.io/spring­cloud­stream/