Table of content



4. Migration of the architecture type for AirportLogistics

The data schema AirportLogistics supports 175 interface methods. Both, the monolith and the microservice architecture supports all of the service interface methods. Because of this fact, the monolith can be exchanged by the microservice architecture without breaking the API for the user applications such as web or mobile applications. This allows architects to switch from a monolithic architecture in the beginning of the application lifetime to a microservice architecture, if the demand for the abilities of a microservice architecture rise over time. This could be the case, if the amount of users rises more and more. If features like availabilty, scalability or independent deployability of application parts become important. this could be a reason to leave the monolithic architecture to a microservice architecture for the price of a much higher system complexity. Local ACID based transactions should be taken instead of complex global transactions whereever this is also possible in a distributed microservice architecture. The monolith connects to one big global database schema with 28 entities. The microservice architecture consists of 7 microservices where each service connects only to one local database schema. Each of the 28 entities can only be written by one microservice, that is the master for this entity. The entity can also be part of other local schemas in other microservices. But these microservices only get a copy of the master microservice entity via a message broker. The copy of the entity arrives in those microservices with a latency time. Only after this entity copy has been integrated in all other local databases, the whole system is a consistent state. Within the latency time, the system is only eventually consistent. Systems, that depend to a hundred percent on a consistent state, must use the synchrounous calls over the API of the microservices and should not use the copies that arrive via the asynchrounous message broker.


Monolith architecture for the AirportLogistics application


Microservice architecture for schema AirportLogistics


Service Interfaces

Relative mapping URLRequest MethodMethod NameMicroserviceInvolved Entities
/employeetask/{id}PUTupdateEmployeeTaskById(employeetask)EmployeeServiceEmployeeTask
/cargobooking/customer/{id}GETfindAllCargoBookingOfCustomer(id)EmployeeServiceCustomer CargoBooking
/seatcategoryGETfindAllSeatCategory()PassengerBookingServiceSeatCategory
/luggagetype/{id}GETfindLuggageTypeById(id)LuggageServiceLuggageType
/airplaneequipment/airplane/{id}GETfindAllAirplaneEquipmentOfAirplane(id)AirplaneServiceAirplane AirplaneEquipment
/airplane/airplanetype/{id}GETfindAllAirplaneOfAirplaneType(id)AirplaneServiceAirplaneType Airplane
/taskPOSTinsertTask(task)EmployeeServiceTask
/luggagecheckPOSTinsertLuggageCheck(luggagecheck)LuggageServiceLuggageCheck
/cargocheck/{id}DELETEdeleteCargoCheckById(id)CargoServiceCargoCheck
/seatcategoryPOSTinsertSeatCategory(seatcategory)PassengerBookingServiceSeatCategory
/luggagetypePOSTinsertLuggageType(luggagetype)LuggageServiceLuggageType
/airport/city/{id}GETfindAllAirportOfCity(id)AirportServiceCity Airport
/airlineGETfindAllAirline()AirplaneServiceAirline
/cargobooking/flight/{id}GETfindAllCargoBookingOfFlight(id)EmployeeServiceFlight CargoBooking
/employeetaskGETfindAllEmployeeTask()EmployeeServiceEmployeeTask
/flightGETfindAllFlight()AirportServiceFlight
/equipmenttype/{id}GETfindEquipmentTypeById(id)AirplaneServiceEquipmentType
/cargo/{id}PUTupdateCargoById(cargo)CargoServiceCargo
/airplaneproducer/{id}DELETEdeleteAirplaneProducerById(id)AirplaneServiceAirplaneProducer
/flightroute/{id}GETfindFlightRouteById(id)AirportServiceFlightRoute
/luggagecheckGETfindAllLuggageCheck()LuggageServiceLuggageCheck
/flightroute/destination/{id}GETfindAllFlightRouteOfDestination(id)AirportServiceAirport FlightRoute
/luggage/{id}DELETEdeleteLuggageById(id)LuggageServiceLuggage
/airplaneproducer/{id}PUTupdateAirplaneProducerById(airplaneproducer)AirplaneServiceAirplaneProducer
/cargocheck/{id}GETfindCargoCheckById(id)CargoServiceCargoCheck
/gate/{id}GETfindGateById(id)AirportServiceGate
/airplane/{id}PUTupdateAirplaneById(airplane)AirplaneServiceAirplane
/cargoPOSTinsertCargo(cargo)CargoServiceCargo
/passengerbooking/{id}PUTupdatePassengerBookingById(passengerbooking)PassengerBookingServicePassengerBooking
/customerPOSTinsertCustomer(customer)EmployeeServiceCustomer
/airportPOSTinsertAirport(airport)AirportServiceAirport
/seat/airplane/{id}GETfindAllSeatOfAirplane(id)PassengerBookingServiceAirplane Seat
/passengerbooking/seat/{id}GETfindAllPassengerBookingOfSeat(id)PassengerBookingServiceSeat PassengerBooking
/employeePOSTinsertEmployee(employee)EmployeeServiceEmployee
/passengerbookingPOSTinsertPassengerBooking(passengerbooking)PassengerBookingServicePassengerBooking
/airplaneGETfindAllAirplane()AirplaneServiceAirplane
/employeetask/{id}GETfindEmployeeTaskById(id)EmployeeServiceEmployeeTask
/passenger/nationality/{id}GETfindAllPassengerOfNationality(id)PassengerBookingServiceCountry Passenger
/employeeGETfindAllEmployee()EmployeeServiceEmployee
/airplanetype/{id}DELETEdeleteAirplaneTypeById(id)AirplaneServiceAirplaneType
/flightrouteGETfindAllFlightRoute()AirportServiceFlightRoute
/seatcategory/{id}PUTupdateSeatCategoryById(seatcategory)PassengerBookingServiceSeatCategory
/passengerbooking/passenger/{id}GETfindAllPassengerBookingOfPassenger(id)PassengerBookingServicePassenger PassengerBooking
/airplane/{id}DELETEdeleteAirplaneById(id)AirplaneServiceAirplane
/flight/{id}DELETEdeleteFlightById(id)AirportServiceFlight
/luggagecheck/luggage/{id}GETfindAllLuggageCheckOfLuggage(id)LuggageServiceLuggage LuggageCheck
/gate/{id}DELETEdeleteGateById(id)AirportServiceGate
/luggage/{id}GETfindLuggageById(id)LuggageServiceLuggage
/seatcategory/{id}GETfindSeatCategoryById(id)PassengerBookingServiceSeatCategory
/customer/{id}GETfindCustomerById(id)EmployeeServiceCustomer
/flightroute/source/{id}GETfindAllFlightRouteOfSource(id)AirportServiceAirport FlightRoute
/luggagecheck/{id}DELETEdeleteLuggageCheckById(id)LuggageServiceLuggageCheck
/passenger/{id}GETfindPassengerById(id)PassengerBookingServicePassenger
/passenger/{id}PUTupdatePassengerById(passenger)PassengerBookingServicePassenger
/airplaneequipment/equipmenttype/{id}GETfindAllAirplaneEquipmentOfEquipmentType(id)AirplaneServiceEquipmentType AirplaneEquipment
/flight/{id}PUTupdateFlightById(flight)AirportServiceFlight
/passengerbookingGETfindAllPassengerBooking()PassengerBookingServicePassengerBooking
/airplaneequipment/{id}PUTupdateAirplaneEquipmentById(airplaneequipment)AirplaneServiceAirplaneEquipment
/cityGETfindAllCity()CountryServiceCity
/airplaneequipmentPOSTinsertAirplaneEquipment(airplaneequipment)AirplaneServiceAirplaneEquipment
/equipmenttypePOSTinsertEquipmentType(equipmenttype)AirplaneServiceEquipmentType
/seat/{id}GETfindSeatById(id)PassengerBookingServiceSeat
/seatcategory/{id}DELETEdeleteSeatCategoryById(id)PassengerBookingServiceSeatCategory
/cargotype/{id}DELETEdeleteCargoTypeById(id)CargoServiceCargoType
/luggagetype/{id}DELETEdeleteLuggageTypeById(id)LuggageServiceLuggageType
/city/country/{id}GETfindAllCityOfCountry(id)CountryServiceCountry City
/cargocheckGETfindAllCargoCheck()CargoServiceCargoCheck
/gate/terminal/{id}GETfindAllGateOfTerminal(id)AirportServiceTerminal Gate
/countryPOSTinsertCountry(country)CountryServiceCountry
/airplaneproducerPOSTinsertAirplaneProducer(airplaneproducer)AirplaneServiceAirplaneProducer
/terminal/airport/{id}GETfindAllTerminalOfAirport(id)AirportServiceAirport Terminal
/gatePOSTinsertGate(gate)AirportServiceGate
/country/{id}GETfindCountryById(id)CountryServiceCountry
/customerGETfindAllCustomer()EmployeeServiceCustomer
/employeetask/{id}DELETEdeleteEmployeeTaskById(id)EmployeeServiceEmployeeTask
/terminal/{id}DELETEdeleteTerminalById(id)AirportServiceTerminal
/cargobooking/employee/{id}GETfindAllCargoBookingOfEmployee(id)EmployeeServiceEmployee CargoBooking
/cargotypePOSTinsertCargoType(cargotype)CargoServiceCargoType
/terminalGETfindAllTerminal()AirportServiceTerminal
/terminal/{id}GETfindTerminalById(id)AirportServiceTerminal
/seat/seatcategory/{id}GETfindAllSeatOfSeatCategory(id)PassengerBookingServiceSeatCategory Seat
/airplaneproducerGETfindAllAirplaneProducer()AirplaneServiceAirplaneProducer
/airplaneproducer/{id}GETfindAirplaneProducerById(id)AirplaneServiceAirplaneProducer
/city/{id}DELETEdeleteCityById(id)CountryServiceCity
/cargo/cargobooking/{id}GETfindAllCargoOfCargoBooking(id)CargoServiceCargoBooking Cargo
/customer/{id}DELETEdeleteCustomerById(id)EmployeeServiceCustomer
/luggagetypeGETfindAllLuggageType()LuggageServiceLuggageType
/airplanetypeGETfindAllAirplaneType()AirplaneServiceAirplaneType
/cargo/{id}DELETEdeleteCargoById(id)CargoServiceCargo
/cargocheck/{id}PUTupdateCargoCheckById(cargocheck)CargoServiceCargoCheck
/airplanetypePOSTinsertAirplaneType(airplanetype)AirplaneServiceAirplaneType
/airplanePOSTinsertAirplane(airplane)AirplaneServiceAirplane
/city/{id}PUTupdateCityById(city)CountryServiceCity
/luggagecheck/{id}PUTupdateLuggageCheckById(luggagecheck)LuggageServiceLuggageCheck
/cargobookingGETfindAllCargoBooking()EmployeeServiceCargoBooking
/employeetask/task/{id}GETfindAllEmployeeTaskOfTask(id)EmployeeServiceTask EmployeeTask
/gateGETfindAllGate()AirportServiceGate
/customer/{id}PUTupdateCustomerById(customer)EmployeeServiceCustomer
/terminalPOSTinsertTerminal(terminal)AirportServiceTerminal
/flight/flightroute/{id}GETfindAllFlightOfFlightRoute(id)AirportServiceFlightRoute Flight
/seatGETfindAllSeat()PassengerBookingServiceSeat
/airplaneequipmentGETfindAllAirplaneEquipment()AirplaneServiceAirplaneEquipment
/airplanetype/{id}PUTupdateAirplaneTypeById(airplanetype)AirplaneServiceAirplaneType
/cargocheckPOSTinsertCargoCheck(cargocheck)CargoServiceCargoCheck
/country/{id}PUTupdateCountryById(country)CountryServiceCountry
/cargoGETfindAllCargo()CargoServiceCargo
/cargocheck/checker/{id}GETfindAllCargoCheckOfChecker(id)CargoServiceEmployee CargoCheck
/luggageGETfindAllLuggage()LuggageServiceLuggage
/airline/{id}PUTupdateAirlineById(airline)AirplaneServiceAirline
/seat/{id}DELETEdeleteSeatById(id)PassengerBookingServiceSeat
/cargobooking/{id}GETfindCargoBookingById(id)EmployeeServiceCargoBooking
/airlinePOSTinsertAirline(airline)AirplaneServiceAirline
/cargotype/{id}PUTupdateCargoTypeById(cargotype)CargoServiceCargoType
/cargo/{id}GETfindCargoById(id)CargoServiceCargo
/luggagetype/{id}PUTupdateLuggageTypeById(luggagetype)LuggageServiceLuggageType
/airline/{id}GETfindAirlineById(id)AirplaneServiceAirline
/flightroute/{id}DELETEdeleteFlightRouteById(id)AirportServiceFlightRoute
/equipmenttype/{id}DELETEdeleteEquipmentTypeById(id)AirplaneServiceEquipmentType
/cargobooking/{id}DELETEdeleteCargoBookingById(id)EmployeeServiceCargoBooking
/passengerPOSTinsertPassenger(passenger)PassengerBookingServicePassenger
/countryGETfindAllCountry()CountryServiceCountry
/city/{id}GETfindCityById(id)CountryServiceCity
/equipmenttypeGETfindAllEquipmentType()AirplaneServiceEquipmentType
/airplanetype/airplaneproducer/{id}GETfindAllAirplaneTypeOfAirplaneProducer(id)AirplaneServiceAirplaneProducer AirplaneType
/flightPOSTinsertFlight(flight)AirportServiceFlight
/cargo/cargotype/{id}GETfindAllCargoOfCargoType(id)CargoServiceCargoType Cargo
/taskGETfindAllTask()EmployeeServiceTask
/cargotype/{id}GETfindCargoTypeById(id)CargoServiceCargoType
/airport/{id}DELETEdeleteAirportById(id)AirportServiceAirport
/passengerGETfindAllPassenger()PassengerBookingServicePassenger
/employee/airline/{id}GETfindAllEmployeeOfAirline(id)EmployeeServiceAirline Employee
/terminal/{id}PUTupdateTerminalById(terminal)AirportServiceTerminal
/airport/{id}GETfindAirportById(id)AirportServiceAirport
/gate/{id}PUTupdateGateById(gate)AirportServiceGate
/flightroute/{id}PUTupdateFlightRouteById(flightroute)AirportServiceFlightRoute
/luggage/luggagetype/{id}GETfindAllLuggageOfLuggageType(id)LuggageServiceLuggageType Luggage
/employeetask/employee/{id}GETfindAllEmployeeTaskOfEmployee(id)EmployeeServiceEmployee EmployeeTask
/task/{id}PUTupdateTaskById(task)EmployeeServiceTask
/airplanetype/{id}GETfindAirplaneTypeById(id)AirplaneServiceAirplaneType
/luggagecheck/checker/{id}GETfindAllLuggageCheckOfChecker(id)LuggageServiceEmployee LuggageCheck
/cargocheck/cargo/{id}GETfindAllCargoCheckOfCargo(id)CargoServiceCargo CargoCheck
/employee/{id}GETfindEmployeeById(id)EmployeeServiceEmployee
/employeetaskPOSTinsertEmployeeTask(employeetask)EmployeeServiceEmployeeTask
/passengerbooking/flight/{id}GETfindAllPassengerBookingOfFlight(id)PassengerBookingServiceFlight PassengerBooking
/seatPOSTinsertSeat(seat)PassengerBookingServiceSeat
/task/{id}DELETEdeleteTaskById(id)EmployeeServiceTask
/luggagecheck/{id}GETfindLuggageCheckById(id)LuggageServiceLuggageCheck
/cargotypeGETfindAllCargoType()CargoServiceCargoType
/luggage/{id}PUTupdateLuggageById(luggage)LuggageServiceLuggage
/flight/departuregate/{id}GETfindAllFlightOfDepartureGate(id)AirportServiceGate Flight
/airportGETfindAllAirport()AirportServiceAirport
/airline/{id}DELETEdeleteAirlineById(id)AirplaneServiceAirline
/task/{id}GETfindTaskById(id)EmployeeServiceTask
/passengerbooking/{id}DELETEdeletePassengerBookingById(id)PassengerBookingServicePassengerBooking
/airplaneequipment/{id}GETfindAirplaneEquipmentById(id)AirplaneServiceAirplaneEquipment
/country/{id}DELETEdeleteCountryById(id)CountryServiceCountry
/airplane/{id}GETfindAirplaneById(id)AirplaneServiceAirplane
/cargobooking/{id}PUTupdateCargoBookingById(cargobooking)EmployeeServiceCargoBooking
/passenger/{id}DELETEdeletePassengerById(id)PassengerBookingServicePassenger
/passengerbooking/{id}GETfindPassengerBookingById(id)PassengerBookingServicePassengerBooking
/cargobookingPOSTinsertCargoBooking(cargobooking)EmployeeServiceCargoBooking
/luggagePOSTinsertLuggage(luggage)LuggageServiceLuggage
/luggage/flightbooking/{id}GETfindAllLuggageOfFlightBooking(id)LuggageServicePassengerBooking Luggage
/seat/{id}PUTupdateSeatById(seat)PassengerBookingServiceSeat
/airplane/airline/{id}GETfindAllAirplaneOfAirline(id)AirplaneServiceAirline Airplane
/flight/airplane/{id}GETfindAllFlightOfAirplane(id)AirportServiceAirplane Flight
/flightroutePOSTinsertFlightRoute(flightroute)AirportServiceFlightRoute
/equipmenttype/{id}PUTupdateEquipmentTypeById(equipmenttype)AirplaneServiceEquipmentType
/cityPOSTinsertCity(city)CountryServiceCity
/airplaneequipment/{id}DELETEdeleteAirplaneEquipmentById(id)AirplaneServiceAirplaneEquipment
/airport/{id}PUTupdateAirportById(airport)AirportServiceAirport
/flight/{id}GETfindFlightById(id)AirportServiceFlight
/flight/arrivalgate/{id}GETfindAllFlightOfArrivalGate(id)AirportServiceGate Flight
/employee/{id}DELETEdeleteEmployeeById(id)EmployeeServiceEmployee
/employee/{id}PUTupdateEmployeeById(employee)EmployeeServiceEmployee





Table of content