admin-on-rest: Как использовать компонент <Resource /> с пользовательскими конечными точками API
Я успешно использую REST-клиент Loopback для администрирования на отдыхе без проблем. Он прост в использовании и очень хорошо работает для стандартных операций CRUD, однако я быстро обнаружил, что мне нужно использовать нетрадиционные вызовы REST, подобные следующим:
http://www.remoteurl.com/api/getUsersWithRolesInfo
Я также хочу, чтобы в некоторых ситуациях использовались внутренние петлевые фильтры Loopback, например:
http://www.remoteurl.com/api/Users?filter=[include][profile]&filter=[include][posts]
Как я могу добиться этого с <Resource />
составная часть?
Первоначально я думал об изменении клиента REST для сопоставления вышеуказанных конечных точек. Однако клиент REST сопоставляет свои вызовы с такими типами, как GET_ONE
, GET_MANY
и т. д. в то время как то, что я хочу отобразить, является URL ../getUserWithRolesInfo
).
Спасибо за вашу помощь.
1 ответ
Вы можете передать постоянный фильтр с вашим компонентом List, а также одноразовый фильтр с компонентом ReferenceInput. Для более конкретных модификаций вызова вашего API вы можете использовать RestWrapper, который будет перехватывать некоторые вызовы вашего API и передавать остальное Loopback Rest Client.
https://marmelab.com/admin-on-rest/RestClients.html
Клиент REST Loopback не учитывает фильтр включения. Вам нужно будет вручную создать URL-запрос. Что-то вроде ниже. Большая часть этого взята из кода AOR-Loopback, как и функция queryParameters, используемая ниже. Вы можете найти все это там и изменить его в соответствии с вашими потребностями.
function getListQueryConstructor(params, apiResource) {
const page = params.pagination.page
const perPage = params.pagination.perPage
const {field, order} = params.sort
const query = {}
if (params.filter.include) {
query['include'] = params.filter.include
delete params.filter.include
}
query['where'] = {...params.filter}
if (field) {query['order'] = [field + ' ' + order]}
if (perPage > 0) {
query['limit'] = perPage;
if (page >= 0) {
query['skip'] = (page - 1) * perPage
}
}
return (config.host + '/' + apiResource + '?' + queryParameters({filter: JSON.stringify(query)}))
}