#ios #rest #backend #cloudkit #zapier
#iOS #остальное #серверная часть #cloudkit #zapier
Вопрос:
Я разрабатываю приложение для Mac, которое использует CloudKit в качестве серверной части. Некоторые из моих пользователей запрашивают возможность приема и извлечения данных с помощью службы автоматизации / интеграции, такой как Zapier. Для этого мне нужно ввести веб-API.
Я планирую использовать веб-службы CloudKit для доступа к данным приложения. Эти данные зависят от пользователя и, следовательно, хранятся в частной базе данных. В результате CloudKit требует аутентификации пользователя, как описано здесь .
По сути, пользователя необходимо перенаправить на страницу аутентификации, размещенную на Apple. После успешной аутентификации предоставляется токен аутентификации, который можно использовать для операций с данными. Аналогично тому, как работает OAuth2, но достаточно отличается, чтобы не работать со схемами аутентификации, поддерживаемыми Zapier (или, возможно, любыми другими подобными службами).
Кто делал что-то подобное? Какие у меня варианты? Я хочу, чтобы все было как можно проще и сделать реализацию моего веб-API как можно более тонкой.
Спасибо.
Нильс
Ответ №1:
Это, безусловно, выполнимо, и вы на правильном пути со своим мышлением. Вот как я представляю, как это работает:
- Вы могли бы сделать все это с помощью интерфейсного веб-приложения (серверное приложение не требуется). Я лично предпочитаю Vue.js но у вас, вероятно, уже есть что-то на уме.
- Вашему приложению потребуется аутентифицировать пользователя в CloudKit, используя упомянутый вами поток. Я настоятельно рекомендую вам использовать API веб-служб и не пытаться бороться с забытым CloudKit JS API от Apple. Для этого вам потребуется сгенерировать токен API на панели управления CloudKit.
- Затем ваше приложение предложит пользователю пройти аутентификацию в Zapier.
- Теперь у вас должны быть учетные данные пользователя как для CloudKit, так и для Zapier в кэше браузера пользователя (вы можете сохранить, например, токен CloudKit в
sessionStorage
и аналогично с Zapier). - Выполните вызовы 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 занимается подобными вещами.