I would like to create an internal API Gateway, which passes calls to external CRUD REST endpoints. Is there an example of a best practice for doing this this using the latest 5.9 release?
For instance, I am not sure whether I am supposed to use IRestGateway, IServiceGateway or the ProxyFeature.
If you just want to pass/proxy all external requests through a single Server you may want to handle it with system software by using the reverse proxying features of popular Web Servers:
If you’d prefer these requests were routed through your .NET App (e.g. an App-level proxy) you can use the ProxyFeature plugin or Microsoft’s new reverse proxy:
If you’re just proxying ServiceStack requests and you want to be able to intercept the Request DTOs in C# I’d recommend using the IServiceGateway which will give you the most flexibility in which configured Service Client gets used to send the request, e.g:
public override void Configure(Container container)
{
container.Register<IServiceGateway>(c => new JsonServiceClient(externalBaseUrl));
}
public class ProxyServices : Service
{
public Task<object> Any(MyRequest1 request) => Gateway.SendAsync(request);
public Task<object> Any(MyRequest2 request) => Gateway.SendAsync(request);
}
If you annotate your Request DTOs with HTTP Verb Interface Markers then you can use Any to Send every Request DTO and it will be sent with that HTTP Method.