Как сделать API уровня абстракции более чистым - PullRequest
0 голосов
/ 06 марта 2019

Введение

Я разрабатываю приложение реагирования, которое должно взаимодействовать с API отдыха.В настоящее время полный API еще не полностью реализован, поэтому я делаю макеты и чтобы не тратить впустую код, я добавляю слой абстракции между макетом / API и приложением.

Текущая ситуация

В настоящее время у меня есть классы, представляющие компоненты (например, «пользователь») в API.Запрос на получение URL obj1/obj2/ob3/ переводится в javascript как server.get("obj1").get("obj2").get("obj3").fetch(...args).then(onsucces,onerror).fetch вернул бы обещание.другие методы

Вопрос

Мой вопрос состоит из 2 частей.Во-первых, есть ли способ очистить эту часть, .get("obj1").get("obj2").get("obj3").(Я не думаю, что Reaction поддерживает прокси).

Во-вторых, если у вас есть рекурсивные запросы

server.get("user").get(<id>).fetch(
    (user)=>{
        update_ui(user);
        user.books.fetch(
            (books)=>{
                update_ui(books);
            },(error)=>{}
        )
    },(error)=>{}
)

они могут быть ужасно быстрыми, есть ли способ, аналогичный .then(...).then(...) (дляобещает) сгладить их или выполнить что-то по-другому, что привело бы к лучшему коду.

Что get().get()...fetch() делает

, то получит построит путь, из которого операции выборки, ... будутвыполняется для фактического API, это будет URL для макета, это может быть жестко закодированный словарь.

, например, get("users").get(<userid>), будет соответствовать объекту вида

{
    path:"users.<userid>" //(or any other seperator)
    fetch: function(...args)  //GET specified in the api
    push: null // api doesn't specify a POST request for this url
    ...
}

перевод HTTP-запроса в javascript выглядит следующим образом:

  • GET в fetch
  • POST в push
  • PUT в set
  • PATCH до update
  • DELETE до pop

реализация этих методов (fetch) будет тогда использовать path иуказанные аргументы для получения, публикации, ... данных.

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