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)}))
}
Другие вопросы по тегам