The difference between them is that AnyServiceInvoker connects to a special built-in service which in turn invokes user services
whereas JSONClient connects to target services directly.

The benefit of using the former is that only one channel is needed for an unlimited number of user services to be invoked
whereas with the latter each service needs its own channel. The drawback of using the former is that it’s slightly slower because
of the additional level of indirection in using a dispatcher service instead of invoking the target one directly.

Another difference is that RBAC definitions for services are easier to manage when using the latter because the same service can
be exposed through multiple channels each using its own credentials serving as the basis for RBAC rules.

When using AnyServiceInvoker responses from services must be produced as strings. When using JSONClient responses may be produced
as strings but when they are not, serialization to JSON will be performed by Zato.

Both AnyServiceInvoker and JSONClient are based on requests down under the hood.

Both AnyServiceInvoker and JSONClient are stateless, they don’t keep any state around. It’s also cheap to create them
on fly, they don’t need to be instantiated upfront but doing it won’t cause any harm either.

How Django views
call Zato depend on whether they use AnyServiceInvoker or JSONClient. When using the former
the name of the target service needs to be provided on input in addition to the actual request. With the latter, only the
request is needed. Regardless of which client is used the response is returned the same way.

Both AnyServiceInvoker and JSONClient are stateless, they don’t keep any state around. They can be simply created once and used
when needed.

How Flask
calls Zato
depends on whether AnyServiceInvoker or JSONClient is used. With the former
the name of the target service needs to be provided on input in addition to the actual request. With the latter, only the
request is needed. Regardless of which client is used the response is returned the same way.