There isn’t a best practice I guess, any of the solutions you listed have their pros and cons. I would also add gRPC to the list.
I explored a REST API, Ports, but ended up with gRPC, I feel it’s the “cleaner” solution to integrate external services I control in terms of interoperability and resilience.






















