Проблема с атрибутом маршрута в шлюзе API микросервиса - PullRequest
0 голосов
/ 30 августа 2018

Я пишу шлюз 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} Маршрут?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...