Как предотвратить конфликт конечных точек при разработке REST API в приложении Express - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть следующие остальные API для получения заказов в express приложении

http://localhost:2000/api/orders/chemists?orderBy=date&startDate=date1&endDate=date2

http://localhost:2000/api/orders/chemists?orderBy=chemist&startDate=date1&endDate=date2

мои запросы следующие ...

router.get("/chemists?orderBy=date", ...)
router.get("/chemists?orderBy=chemist", ...) 

Когда я делаю запрос с почтальоном, выполняется верхний, а не нижний? Любые предложения о том, как структурировать с помощью REST API. Спасибо.

1 Ответ

3 голосов
/ 03 апреля 2020

Вы не помещаете строку запроса в определение маршрута с Express. Если вы собираетесь остаться с этой структурой URL, тогда вам нужен один обработчик маршрута и использовать if на основе значений в req.query:

router.get("/chemists", (req, res) => {
    if (req.query.orderBy === "date") {
         // handle /chemists?orderBy=date
    } else if (req.query.orderBy === "chemist") {
         // /chemists?orderBy=chemist
    } else {
         // handle neither chemist or date specified
    }
});

Если вы действительно, действительно хотели отдельные маршруты для них в Express вам придется изменить дизайн URL-адреса на что-то вроде:

 /chemists/date
 /chemists/person

, для которого вы затем можете объявить отдельный маршрут для каждого. Поскольку этот порядок сортировки на самом деле является просто атрибутом запроса (те же ресурсы запрашиваются в любом случае), имеет смысл (в схеме REST), чтобы он был первым параметром в строке запроса с одним маршрутом.

...