Я пишу шлюз Microservice API и хочу направить клиентский запрос в соответствующий Microservice. Когда появляется Microservice, они представляют свои сервисы через API-шлюз, и мы храним их в Redis.
{
"Id": "api/values.put",
"Microservice": "Sample",
"Controller": "api/Values",
"Action": "",
"Method": "Put",
"IpAddress": "http://localhost:4560"
}
Например, клиентские звонки / сервис / компания из шлюза, и я нахожу микросервис, который может обработать этот запрос и направить запрос на него.
Но у меня проблемы в некоторых ситуациях.
У меня есть такой контроллер:
[RoutePrefix("api/Company")]
public class CompanyController : ApiControllerRead
{
public IEnumerable<Company> Get()
{
return new List<Company>();
}
public Company Get(int id)
{
return new Company();
}
[Route("{companyId}/Employees")]
public IEnumerable<Employee> GetEmployees(int companyId)
{
// Filter Data
return new List<Employee>();
}
[Route("{companyId}/Employees/{employeeId}")]
public Employee GetEmployeeById(int companyId, int employeeId)
{
// Filter Data
return new Employee();
}
}
По умолчанию, если клиентский запрос /service/Company
Я могу легко найти Microservice от Redis и отправить запрос.
Но проблема возникает, когда нам нужно использовать атрибут Route.
Мы думаем сохранить атрибуты маршрута в базе данных следующим образом:
{
"Id": "api/company.getemployeebyid",
"Microservice": "Sample",
"Controller": "api/Company",
"Action": "",
"Method": "GetEmployeeById",
"IpAddress": "http://localhost:4560",
"Route" : "{companyId}/Employees/{employeeId}"
}
Итак, если клиент звонит /service/Company/1/Employees/1
, как я могу определить, что этот URL соответствует {companyId}/Employees/{employeeId}
Маршрут?