Используйте поток аутентификации веб-служб CloudKit в сочетании с Zapier

#ios #rest #backend #cloudkit #zapier

#iOS #остальное #серверная часть #cloudkit #zapier

Вопрос:

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

Я планирую использовать веб-службы CloudKit для доступа к данным приложения. Эти данные зависят от пользователя и, следовательно, хранятся в частной базе данных. В результате CloudKit требует аутентификации пользователя, как описано здесь .

По сути, пользователя необходимо перенаправить на страницу аутентификации, размещенную на Apple. После успешной аутентификации предоставляется токен аутентификации, который можно использовать для операций с данными. Аналогично тому, как работает OAuth2, но достаточно отличается, чтобы не работать со схемами аутентификации, поддерживаемыми Zapier (или, возможно, любыми другими подобными службами).

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

Спасибо.

Нильс

Ответ №1:

Это, безусловно, выполнимо, и вы на правильном пути со своим мышлением. Вот как я представляю, как это работает:

  1. Вы могли бы сделать все это с помощью интерфейсного веб-приложения (серверное приложение не требуется). Я лично предпочитаю Vue.js но у вас, вероятно, уже есть что-то на уме.
  2. Вашему приложению потребуется аутентифицировать пользователя в CloudKit, используя упомянутый вами поток. Я настоятельно рекомендую вам использовать API веб-служб и не пытаться бороться с забытым CloudKit JS API от Apple. Для этого вам потребуется сгенерировать токен API на панели управления CloudKit.
  3. Затем ваше приложение предложит пользователю пройти аутентификацию в Zapier.
  4. Теперь у вас должны быть учетные данные пользователя как для CloudKit, так и для Zapier в кэше браузера пользователя (вы можете сохранить, например, токен CloudKit в sessionStorage и аналогично с Zapier).
  5. Выполните вызовы API в Zapier, извлеките данные, а затем сохраните их в CloudKit all в своем JS-приложении. На данный момент это все транзакции API. Я поклонник Axios для выполнения HTTP-запросов.

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

В качестве альтернативы, если вам вообще не нужно веб-приложение и вы хотите, чтобы пользователь работал только в приложении Mac, это тоже можно сделать. Просто выполняйте вызовы API непосредственно в Zapier из своего приложения Cocoa. Возможно ли это, зависит от того, как вы хотите, чтобы это работало.

Если у вас есть более конкретные вопросы или вам нужна помощь с любыми деталями реализации, не стесняйтесь добавлять дополнительные комментарии или задавать новый вопрос.

Удачи!

Комментарии:

1. Большое спасибо за ваш подробный ответ. В идеале я хотел бы перейти непосредственно из приложения в Zapier. Но я не знал, что Zapier поддерживает это? Разве им не требуется веб-API с моей стороны для доступа к данным? Zapier использует такие концепции, как аутентификация (для аутентификации Zapier в моем API от имени пользователя), триггеры (для запуска рабочих процессов на основе данных, полученных из моего API) и действия (для доступа и изменения данных из моего API).). Как будут работать эти концепции, если у меня нет API, а я полагаюсь исключительно на отправку данных из моего приложения напрямую в Zapier?

2. У меня нет большого опыта в этом, но вы должны иметь возможность взаимодействовать с веб-API Zapier из своего приложения для Mac, используя URLSession : developer.apple.com/documentation/foundation/urlsession … Я уже выполнял проверку подлинности OAuth в приложении для Mac раньше. Обычно вы можете задать URL обратного вызова и указать тот, который откроет ваше собственное приложение. Например: yourApp://callback?data1=abcamp;value2=xyz

3. Но часть аутентификации Zapier заключается не в аутентификации с помощью Zapier, а в том, чтобы Zapier аутентифицировался с моим API, верно? Не могли бы вы указать мне на документы (API), объясняющие, как я могу взаимодействовать с их API?

Ответ №2:

Я думаю, что другой ответ в основном правильный. Я мало что знаю о CloudKit, но мы можем обсудить, что вам нужно для его работы.

Допустим, у вас было простое приложение для iOS, в котором хранились контакты. На стороне iOS Apple, по-видимому, абстрагирует операции загрузки и выгрузки.

Если вы хотите создать веб-просмотрщик для синхронизированных контактов с помощью CloudKit, вам понадобится конечная точка для извлечения всех строк, принадлежащих аутентифицированному пользователю (каждая из которых будет иметь UUID, имя и номер телефона). Я считаю, что это возможно с помощью кода CloudKit, который предоставляет Apple (но дайте мне знать, если я ошибаюсь).

Теперь мы хотим интегрироваться с Zapier. Скажем, триггер «Новый контакт». Вы отправляете какой-то аутентифицированный HTTP-запрос от Zapier к Apple от имени аутентифицированного пользователя. Он возвращает список контактов, и Zapier может запускать те, которые он раньше не видел. Для этого Zapier нужен какой-то пользовательский токен.

Вот где вступает в игру небольшая интерфейсная страница, упомянутая другим ответчиком. Если у вас есть веб-страница, которая может отображать токен пользователя, они могут вставить его в Zapier, и все вышеперечисленное становится возможным. Я не уверен, какова продолжительность жизни токена, но, надеюсь, его можно будет автоматически обновлять по мере необходимости (вместо того, чтобы пользователю нужно было выполнять какие-либо действия вручную).).

Я не уверен, возможно ли то, что я описал, но дайте мне знать, если это так. Было бы здорово, если бы можно было интегрировать Zapier и экосистему iOS!


Редактировать, чтобы отвечать на комментарии:

Zapier не сможет взаимодействовать с CloudKit достаточным для меня способом (требуется некоторая незначительная бизнес-логика)

Я не уверен, что это влечет за собой для вас, но обычно логика интеграции Zapier используется для структурирования данных так, как ожидает Zapier. Существует полная Node.js среда выполнения, так что здесь предел — небо.

Я не думаю, что Zapier может проходить аутентификацию в CloudKit, поскольку он использует нестандартную схему аутентификации

Как только вы получите токен пользователя (описанный выше, что необычно), вы почти наверняка сможете использовать его в запросах к cloudkit. Zapier предоставляет «пользовательскую» схему аутентификации, которая позволяет вам делать практически все, что вы хотите. Поэтому, если Apple не использует что-то, что fetch не может обработать (маловероятно), все должно быть в порядке (как только вы получите токен).

Я хотел бы передавать данные непосредственно из моего приложения в Zapier и выполнять любую магию, настроенную пользователем

Это также, вероятно, возможно. Zapier получает данные двумя способами:

  • опрос, при котором Zapier часто выполняет веб-запрос, сохраняет идентификаторы элементов, которые мы видели раньше, и обрабатывает новые. Подробнее об этом можно прочитать здесь . Предполагая, что вы можете интегрировать свою бизнес-логику в интеграцию, для этого не требуется внешний сервер, кроме Apple
  • webhooks, где Zapier регистрирует у вас подписку, и вы отправляете новые данные по запросу на этот адрес. Для обработки этого, вероятно, потребуется веб-сервер на вашем конце. Хотя это необязательно — вместо этого вы можете выполнить опрос.

Надеюсь, это немного прояснило ситуацию. Не стесняйтесь обращаться к partners@zapier.com и обратитесь к этому вопросу, чтобы подробнее поговорить об этом.

Комментарии:

1. Для этого все еще, скорее всего, требуется веб-API с моей стороны, поскольку Zapier не сможет взаимодействовать с CloudKit достаточным для меня способом (требуется некоторая незначительная бизнес-логика). Но даже когда это можно сделать напрямую, я не думаю, что Zapier может аутентифицироваться в CloudKit, поскольку он использует нестандартную схему аутентификации. В идеале я хотел бы передавать данные непосредственно из моего приложения в Zapier и выполнять любую магию, настроенную пользователем. Но, основываясь на моем опыте, это не то, что поддерживает / делает Zapier. Думаю, мне нужно будет внедрить свой собственный веб-API с пользовательской аутентификацией.

2. @NielsMouthaan Я отредактировал свой ответ, чтобы ответить на некоторые из этих вопросов — я все еще в основном снимаю в темноте, но это определенно возможно!

3. Спасибо. Рассмотрю их, как только начну работать над этой интеграцией. Несколько комментариев, которые пришли мне в голову, когда я читал ваши:

4. Я не уверен, что ваши комментарии были опубликованы, если вы их имели в виду, ПОЭТОМУ комментарии не являются многострочными

5. По-видимому, они этого не сделали 😅. Для ваших предложений по опросу и webhook по-прежнему требуется веб-API с моей стороны, чего я надеялся избежать. Я надеялся отправить данные в Zapier непосредственно из моего приложения (следовательно, опубликовать). Затем это вызовет какое-либо действие в зависимости от того, как пользователь настроил интеграцию. Но я не думаю, что Zapier занимается подобными вещами.