Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Начните с маленькой подводной лодки: устанавливайте бомбы, избавляйтесь от врагов и старайтесь не попадаться на глаза своим плавучим врагам. Вас ждет еще несколько игровых вселенных, много уникальных сюжетов и интересных загадок.

Пикабомбер

Аркады, Пиксельная, 2D

Играть

Топ прошлой недели

  • CharlotteLink CharlotteLink 1 пост
  • Syslikagronom Syslikagronom 7 постов
  • BydniKydrashki BydniKydrashki 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

API

С этим тегом используют

Программирование IT Python Искусственный интеллект ВКонтакте Нейронные сети Разработка Все
130 постов сначала свежее
32
tproger.official
tproger.official
3 года назад
Типичный программист

Один за всех и все за одного⁠⁠

Я: *случайно удаляю одно поле в таблице*

Это поле в таблице:

Один за всех и все за одного IT, IT юмор, Backend, Frontend, База данных, API, Веб-разработка
Показать полностью 1
IT IT юмор Backend Frontend База данных API Веб-разработка
5
richardonline
richardonline
3 года назад

Best 5 Instant Messaging API & SDK Platforms Reviewed and Compared (2021)⁠⁠

Instant messaging APIs have made their presence known in the world. Whether it could be interpersonal relationships; communication between brands and customers or a simple conversation between friends - instant messaging APIs are changing the world. This is so possible mainly because of the functionalities that make them stand out in the market.


So, if you are hunting for the world's best instant messaging API and SDK provider, then you have landed at the right spot! Let's have a straight-cut view over the variety of instant messaging SDK and API providers that can be easily deployed and boost your brand and business.


Comparison Of The 5 Best Instant Messaging API & SDK Platforms In 2021


1. CONTUS MirrorFly Instant Messaging API


CONTUS MirrorFly is a self-hosted instant messaging API & SDK solution that helps developers build a real-time chat app for iOS, Android & Web platforms. This is a secure instant messaging API that scales 1 billion concurrent users with 100% customizable options & 150+ chat features. Developers can build real-time chat apps with CONTUS MirrorFly and experience powerful communication solutions and support by a team of dedicated in-house developers. Moreover, hosting a chat platform using CONTUS MirrorFly is simpler as it offers flexibility.


CONTUS MirrorFly API & SDK Features

1. Fully Customizabel API & SDK

2. Complete Chat Solution (Video ,Voice & Chat)

3. Unlimited Video and Audio Calling

4. Centralized Admin

5. Multilingual Support

6. Messaging Statistics

7. Searchability

8. Helpdesk

9. Push Notifications

10. Geolocation Sharing


Why Developers Choose MirrorFly Instant Messaging API & SDK

With MirrorFly API and SDK, developers have complete access to the entire source code offering them control and flexibility. Deploying the chat app is also easy as MirrorFly API and SDK provide both server hosting and cloud hosting possibilities. Furthermore, with security, compliance, data integrity, real-time, and an expert team to offer support - Mirrorfly is the go-to chat platform API for developers.


Pros

One-time Payment

Whitelable Chat Platform

Fully Customizable API & SDK

Developer Friendly Platform

Self-hosting


Cons

No Monthly Subscription



2. Apphitect Instant Messaging SDK


Apphitect is a well-known instant messaging API and offers Whitelabel chat app solutions to acclaimed brands across the world. Apphitect instant messaging SDK and API helps developers to conveniently build real-time chat apps. With Apphitect developers can create high-stake chat systems to support enterprise mobility, cross-platform development, mobile application and so much more.


Appitect API & SDK Features

1. Hi-end Operating System

2. Complete Customization

3. Scalability

4. Security

5. Third Party Integration

6. Voice And Video Call

7. Offline / Online Push Notifications

8. Group Chat

9. Multimedia Sharing

10. Flexible Cloud Hosting


Why Developers Apphitect  Instant Messaging API & SDK

Developers are choosing Apphitect as it is developed using Erlang language which enhances the performance of any chat application. The API is built on the FreeBSD operating system that offers developers a soft network stack similar to WhatsApp OS. This makes it easier to control and scale the built chat application. Also, Apphitect uses Amazon Web Service which delivers immense scalability, Third-Party and managing an extensive database becomes easy.


Pros

Renders High-Stake Tech Solutions

Supports Erlang, Ejabberd, XMPP Server, Amazon S3 Server,

Reliable, Secure & Scalable

Whitelabel Chat App Solution



Cons

Only for Enterprise Business


3. CometChat Instant Messaging API

CometChat allows developers to quickly add instant messaging features on their websites and apps. For more than 10 years, CometChat's dedicated team has built the most robust, easy-to-use, reliable messaging solution using their instant messaging API. CometChat's chat API and cross-platform SDKs are extremely secure and scalable.


Cometchat API & SDK Features

1.1-to-1 & Group Text Chat

2. Auto-Scaling

3. Single Sign-On (SSO)

4. Voice & Video Calling

5. Online Presence Indicators

6. Webhooks & Bots

7. Rich Media Attachments

8. Manage Message History

9. Custom Messages

10. Cross-platform SDKs


Why Developers Cometchat Instant Messaging API & SDK

CometChat offers android and iOS instant messaging APIsto that can work across platforms and is easy to set up. Developers need to simply follow a single line of code that allows them to set up a secure connection on the same protocols as WhatsApp. Besides, the UI elements let developers integrate features and extensions effortlessly.


Pros

Supports jQuery, Bootstrap & PHP

Offers Customized UI & Workflow

Whitelabel Chat App Solution

Monthly Subscription


Cons

Linux deployment is not available

Expensive in comparison to competitors


4. Quickblox Messaging API & SDK

QuickBlox is an instant messaging API service provider. The chat API platform uses the XMPP protocol, WebRTC signaling for video or voice calling and API for sending push notifications. With QuickBlox, developers can build real time chat apps and make use of user management systems, data storage and so much more.


Quickblox API & SDK Features

1. Chat / IM

2. User login / registration

3. Video Calling

4. Push Notifications

5. Voice / VOIP Calling

6. Content & amp version

7. Files Sharing

8. Geo Location

9. Ratings

10. Custom Objects


Why Developers Prefer Quickblox Messaging API

QuickBlox is HIPAA compliant, GDPR compliant, and one of the most secure systems to work on for developers. QuickBlox also offers developers a step-by-step guide on how to log in to QuickBlox API using external authentication and provides code samples to make integration simple. In addition, QuickBlox Android SDK supports Java and Kotlin programming languages – the two most prominently used programming languages.


Pros

HIPAA & GDPR compliant

On-Premise Installation & Private Cloud Hosting Options

Apt For Various Types of Industry


Cons

Limited subscription plans and no tailored pricing solutions


5.Applozic Instant Messaging API


Applozic is a wide-ranging chat SDK and messaging suite solution that offers in-app communications for businesses. Applozic was developed by developers for developers. The instant messaging API and SDK offered by Applozic are highly compliant and scalable for all types of enterprises. Applozic brings real-time engagement with chat, video, and voice to any type of chat platform - be it web or mobile apps.


Applozic API & SDK Features

1. Video and Audio Call

2. UI Toolkit

3. Tracking Tools

4. Push Notification

5. SMS and Email

6. Block User

7. Multi-Platform

8. Cross-App Chat

9. Data on your Server

10. Open-Source SDK


Why Developers Applozic Prefer Instant Messaging API

Developers choose Applozic because it offers a comprehensive chat development system. With powerful SDKs, UI kit building elements and advanced data and backend security – developers can readily customize and build real-time chat app chat platforms.


Pros

Secure & Private Messaging

Made By Developers For Developers

Offers AI Chatbots & Custom Integration


Cons

It only has a web-based API and SDK does not support Android, iOS, and Desktop.


A developer's point of view on how instant messaging API & SDK enhance the experience of using an application?


For developers using instant messaging API & SDK can speed up deployment. Coders are not required to code from a blank slate and can rather offer that same efficiency to an application, with a chat platform API. Moreover, the integration of an instant messaging API or SDK expands the reach of an application. With open-source platforms to build chat apps, developers practically share-worthy and precious technologies at a larger scale. Ultimately, IM APIs & SDKs can aid in better communication between user to user, business to customer, business to business, or service provider to the customer - chat APIs can help a business shape awesome chat tweaks and enhance the overall experience of using a chat application.


Conclusion:

Now that you know the five best-rated and most secure instant messaging API providers, the next most important thing to remember is that you have to align your business goals with the application you build.

Best 5 Instant Messaging API & SDK Platforms Reviewed and Compared (2021) Разработчики, API, Длиннопост
Показать полностью 1
[моё] Разработчики API Длиннопост
2
55
noopel
noopel
3 года назад
Лига программистов

Разработка системы заметок с нуля. Часть 2: REST API для RESTful API Service + JWT + Swagger⁠⁠

Продолжаем серию материалов про создание системы заметок. В этой части мы спроектируем и разработаем RESTful API Service на Go cо Swagger и авторизацией. Будет много кода, ещё больше рефакторинга и даже немного интеграционных тестов.

В первой части мы спроектировали систему и посмотрели, какие сервисы требуются для построения микросервисной архитектуры.


Исходники проекта — в репозитории на GitHub.


Подробности в видео и текстовой расшифровке под ним.

Прототипирование


Начнём с макетов интерфейса. Нам нужно понять, какие ручки будут у нашего API и какой состав данных он должен отдавать. Макеты мы будем делать, чтобы понять, какие сущности, поля и эндпоинты нам нужны. Используем для этого онлайн-сервис NinjaMock. Он подходит, если макет надо сделать быстро и без лишних действий.

Страницу регистрации сделаем простую, с четырьмя полями: Name, Email, Password и Repeat Password. Лейблы делать не будем, обойдемся плейсходерами. Авторизацию сделаем по юзернейму и паролю.

После входа в приложение пользователь увидит список заметок, который будет выглядеть примерно так:

Разработка системы заметок с нуля. Часть 2: REST API для RESTful API Service + JWT + Swagger API, Программирование, Golang, Python, Mockup, Rest, Видео, Длиннопост

Интерфейс, который будет у нашего веб-приложения:

- Слева — список категорий любой вложенности.

- Справа — список заметок в виде карточек, который делится на два списка: прикреплённые и обычные карточки.

- Каждая карточка состоит из заголовка, который урезается, если он очень длинный.

- Справа указано, сколько секунд/минут/часов/дней назад была создана заметка.

- Тело заголовка — отрендеренный Markdown.

- Панель инструментов. Через неё можно изменить цвет, прикрепить или удалить заметку.


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


Полная карточка открывается по клику на заметку. Тут можно сразу отобразить полностью длинный заголовок. Высота заметки зависит от количества текста. Для файлов появляется отдельная секция. Мы их будем получать отдельным асинхронным запросом, который не помешает пользователю редактировать заметку. Файлы можно скачать по ссылке, также есть отдельная кнопка на добавление файлов.

Разработка системы заметок с нуля. Часть 2: REST API для RESTful API Service + JWT + Swagger API, Программирование, Golang, Python, Mockup, Rest, Видео, Длиннопост

Так будет выглядеть открытая заметка


В ходе прототипирования стало понятно, что в первой части мы забыли добавить еще один микросервис — TagsService. Он будет управлять тегами.


Определение эндпоинтов


Для страниц авторизации и регистрации нам нужны эндпоинты аутентификации и регистрации соответственно. В качестве аутентификации и сессий пользователя мы будем использовать JWT. Что это такое и как работает, разберём чуть позднее. Пока просто запомните эти 3 буквы.

Для страницы списка заметок нам нужны эндпоинты /api/categories для получения древовидного списка категорий и /api/notes?category_id=? для получения списка заметок текущей категории. Перемещаясь по другим категориям, мы будем отдельно запрашивать заметки для выбранной категории, а на фронтенде сделаем кэш на клиенте. В ходе работы с заметками нам нужно уметь создавать новую категорию. Это будет метод POST на URL /api/categories. Также мы будем создавать новый тег при помощи метода POST на URL /api/tags.

Разработка системы заметок с нуля. Часть 2: REST API для RESTful API Service + JWT + Swagger API, Программирование, Golang, Python, Mockup, Rest, Видео, Длиннопост

Чтобы обновить заметку, используем метод PATCH на URL /api/notes/:uuid с измененными полями. Делаем PATCH, а не PUT, потому что PUT требует отправки всех полей сущности по спецификации HTTP, а PATCH как раз нужен для частичного обновления. Для отображения заметки нам ещё нужен эндпоинт /api/notes/:uuid/files с методами POST и GET. Также нам нужно скачивать файл, поэтому сделаем метод GET на URL /api/files/:uuid.

Разработка системы заметок с нуля. Часть 2: REST API для RESTful API Service + JWT + Swagger API, Программирование, Golang, Python, Mockup, Rest, Видео, Длиннопост

Структура репозитория системы


Ещё немного общей информации. Структура репозитория всей системы будет выглядеть следующим образом:

Разработка системы заметок с нуля. Часть 2: REST API для RESTful API Service + JWT + Swagger API, Программирование, Golang, Python, Mockup, Rest, Видео, Длиннопост

В директории app будет исходный код сервиса (если он будет). На уровне с app будут другие директории других продуктов, которые используются с этим сервисом, например, MongoDB или ELK. Продукты, которые будут использоваться на уровне всей системы, например, Consul, будут в отдельных директориях на уровне с сервисами.


Разработка сервиса


Писать будем на Go


- Идём на официальный сайт.

- Копируем ссылку до архива, скачиваем, проверяем хеш-сумму.

- Распаковываем и добавляем в переменную PATH путь до бинарников Go

- Пишем небольшой тест проверки работоспособности, собираем бинарник и запускаем.


Установка завершена, всё работает


Теперь создаём проект. Структура стандартная:

- build — для сборок,

- cmd — точка входа в приложение,

- internal — внутренняя бизнес-логика приложения,

- pkg — для кода, который можно переиспользовать из проекта в проект.


Я очень люблю логировать ход работы приложения, поэтому перенесу свою обёртку над логером logrus из другого проекта. Основная функция здесь Init, которая создает логер, папку logs и в ней файл all.log со всеми логами. Кроме файла логи будут выводиться в STDOUT. Также в пакете реализована поддержка логирования в разные файлы с разным уровнем логирования, но в текущем проекте мы это использовать не будем.


APIService будет работать на сокете. Создаём роутер, затем файл с сокетом и начинаем его слушать. Также мы хотим перехватывать от системы сигналы завершения работы. Например, если кто-то пошлёт приложению сигнал SIGHUP, приложение должно корректно завершиться, закрыв все текущие соединения и сессии. Хотел перехватывать все сигналы, но линтер предупреждает, что os.Kill и SIGSTOP перехватить не получится, поэтому их удаляем из этого списка.


Теперь давайте добавим сразу стандартный handler для метрик. Я его копирую в директорию pkg, далее добавляю в роутер. Все последующие роутеры будем добавлять так же.

Далее создаём точку входа в приложение. В директории cmd создаём директорию main, а в ней — файл app.go. В нём мы создаём функцию main, в которой инициализируем и создаём логер. Роутер создаём через ключевое слово defer, чтобы метод Init у роутера вызвался только тогда, когда завершится функция main. Таким образом можно выполнять очистку ресурсов, закрытие контекстов и отложенный запуск методов. Запускаем, проверяем логи и сокет, всё работает.

Но для разработки нам нужно запускать приложение на порту, а не на сокете. Поэтому давайте добавим запуск приложения на порту в наш роутер. Определять, как запускать приложение, мы будем с помощью конфига.


Создадим для приложения контекст. Сделаем его синглтоном при помощи механизма sync.Once. Пока что в нём будет только конфиг. Контекст в виде синглтона создаю исключительно в учебных целях, впоследствии он будет выпилен. В большинстве случаев синглтоны — необходимое зло, в нашем проекте они не нужны. Далее создаём конфиг. Это будет YAML-файл, который мы будем парсить в структуру.


В роутере мы вытаскиваем из контекста конфиг и на основании listen.type либо создаем сокет, либо вешаем приложение на порт. Код graceful shutdown выделяем в отдельный пакет и передаём на вход список сигналов и список интерфейсов io.Close, которые надо закрывать. Запускаем приложение и проверяем наш эндпоинт heartbeat. Всё работает. Давайте и конфиг сделаем синглтоном через механизм sync.Once, чтобы потом безболезненно удалить контекст, который создавался в учебных целях.


Теперь переходим к API. Создаём эндпоинты, полученные при анализе прототипов интерфейса. Тут важно отметить, что у нас все данные привязаны к пользователю. На первый взгляд, все ручки должны начинаться с пользователя и его идентификатора /api/users/:uuid. Но у нас будет авторизация, иначе любой пользователь сможет программно запросить заметки любого другого пользователя. Авторизацию можно сделать следующим образом: Basic Auth, Digest Auth, JSON Web Token, сессии и OAuth2. У всех способов есть свои плюсы и минусы. Для этого проекта мы возьмём JSON Web Token.


Работа с JSON Web Token


JSON Web Token (JWT) — это JSON-объект, который определён в открытом стандарте RFC 7519. Он считается одним из безопасных способов передачи информации между двумя участниками. Для его создания необходимо определить заголовок (header) с общей информацией по токену, полезные данные (payload), такие как id пользователя, его роль и т.д., а также подписи (signature).


JWT использует преимущества подхода цифровой подписи JWS (Signature) и кодирования JWE (Encrypting). Подпись не даёт кому-то подделать токен без информации о секретном ключе, а кодирование защищает от прочтения данных третьими лицами. Давайте разберёмся, как они могут нам помочь для аутентификации и авторизации пользователя.


Аутентификация — процедура проверки подлинности. Мы проверяем, есть ли пользователь с полученной связкой логин-пароль в нашей системе.


Авторизация — предоставление пользователю прав на выполнение определённых действий, а также процесс проверки (подтверждения) данных прав при попытке выполнения этих действий.

Другими словами, аутентификация проверяет легальность пользователя. Пользователь становится авторизированным, если может выполнять разрешённые действия.


Важно понимать, что использование JWT не скрывает и не маскирует данные автоматически. Причина использования JWT — проверка, что отправленные данные были действительно отправлены авторизованным источником. Данные внутри JWT закодированы и подписаны, но не зашифрованы. Цель кодирования данных — преобразование структуры. Подписанные данные позволяют получателю данных проверить аутентификацию источника данных.


Реализация JWT в нашем APIService:

- Создаём директории middleware и jwt, а также файл jwt.go.

- Описываем кастомные UserClaims и сам middlware.

- Получаем заголовок Authorization, оттуда берём токен.

- Берём секрет из конфига.

- Создаём верификатор HMAC.

- Парсим и проверяем токен.

- Анмаршалим полученные данные в модель UserClaims.

- Проверяем, что токен валидный на текущий момент.


При любой ошибке отдаём ответ с кодом 401 Unauthorized. Если ошибок не было, в контекст сохраняем ID пользователя в параметр user_id, чтобы во всех хендлерах его можно было получить. Теперь надо этот токен сгенерировать. Это будет делать хендлер авторизации с методом POST и эндпоинтом /api/auth. Он получает входные данные в виде полей username и password, которые мы описываем отдельной структурой user. Здесь также будет взаимодействие с UserService, нам надо там искать пользователя по полученным данным. Если такой пользователь есть, то создаём для него UserClaims, в которых указываем все нужные для нас данные. Определяем время жизни токена при помощи переменной ExpiresAt — берём текущее время и добавляем 15 секунд. Билдим токен и отдаём в виде JSON в параметре token. Клиента к UserService у нас пока нет, поэтому делаем заглушку.


Добавим в хендлер с heartbeat еще один тестовый хендлер, чтобы проверить работу аутентификации. Пишем небольшой тест. Для этого используем инструмент sketch, встроенный в IDE. Делаем POST-запрос на /api/auth, получаем токен и подставляем его в следующий запрос. Получаем ответ от эндпоинта /api/heartbeat, по истечении 5 секунд мы начнём получать ошибку с кодом 401 Unauthorized.


Наш токен действителен очень ограниченное время. Сейчас это 15 секунд, а будет минут 30. Но этого всё равно мало. Когда токен протухнет, пользователю необходимо будет заново авторизовываться в системе. Это сделано для того, чтобы защитить пользовательские данные. Если злоумышленник украдет токен авторизации, который будет действовать очень большой промежуток времени или вообще бессрочно, то это будет провал.


Чтобы этого избежать, прикрутим refresh-токен. Он позволит пересоздать основной токен доступа без запроса данных авторизации пользователя. Такие токены живут очень долго или вообще бессрочно. После того как только старый JWT истекает мы больше не можем обратиться к API. Тогда отправляем refresh-токен. Нам приходит новая пара токена доступа и refresh-токена.

Хранить refresh-токены на сервере мы будем в кэше. В качестве реализации возьмём FreeCache. Я использую свою обёртку над кэшем из другого проекта, которая позволяет заменить реализацию FreeCache на любую другую, так как отдает интерфейс Repository с методами, которые никак не связаны с библиотекой.


Пока рассуждал про кэш, решил зарефакторить существующий код, чтобы было удобней прокидывать объекты без dependency injection и синглтонов. Обернул хендлеры и роутер в структуры. В хендлерах сделал интерфейс с методом Register, которые регистрируют его в роутере. Все объекты теперь инициализируются в main, весь роутер переехал в мейн. Старт приложения выделили в отдельную функцию также в main-файле. Теперь, если хендлеру нужен какой-то объект, я его просто буду добавлять в конструктор структуры хендлера, а инициализировать в main. Плюс появилась возможность прокидывать всем хендлерам свой логер. Это будет удобно когда надо будет добавлять поле trace_id от Zipkin в строчку лога.

Вернемся к refresh_token. Теперь при создании токена доступа создадим refresh_token и отдадим его вместе с основным. Сделаем обработку метода PUT для эндпоинта /api/auth, а в теле запроса будем ожидать параметр refresh_token, чтобы сгенерировать новую пару токена доступа и refresh-токена. Refresh-токен мы кладём в кэш в качестве ключа. Значением будет user_id, чтобы по нему можно было запросить данные пользователя у UserService и сгенерировать новый токен доступа. Refresh-токен одноразовый, поэтому сразу после получения токена из кэша удаляем его.


Описание API


Для описания нашего API будем использовать спецификацию OpenAPI 3.0 и Swagger — YAML-файл, который описывает все схемы данных и все эндпоинты. По нему очень легко ориентироваться, у него приятный интерфейс. Но описывать вручную всё очень муторно, поэтому лучше генерировать его кодом.


- Создаём эндпоинты /api/auth с методами POST и PUT для получения токена по юзернейму и паролю и по Refresh-токену соответственно.

- Добавляем схемы объектов Token и User.

- Создаём эндпоинты /api/users с методом POST для регистрации нового пользователя. Для него создаём схему CreateUser.


Понимаем, что забыли сделать хендлер для регистрации пользователя. Создаём метод Signup у хенлера Auth и структуру newUser со всеми полями для регистрации. Генерацию JWT выделяем в отдельный метод, чтобы можно было его вызывать как в Auth, так и в Signup-хендлерах. У нас всё еще нет UserService, поэтому проставляем TODO. Нам надо будет провалидировать полученные данные от пользователя и потом отправить их в UserService, чтобы он уже создал пользователя и ответил нам об успехе. Далее вызываем функцию создания пары токена доступа и refresh-токена и отдаём с кодом 201.


У нас есть подсказка в виде Swagger-файла. На его основе создаём все нужные хендлеры. Там, где вызов микросервисов, будем проставлять комментарий с TODO.


Создаём хендлер для категорий, определяем URL в константах. Далее создаём структуры. Опираемся на Swagger-файл, который создали ранее. Далее создаём сам хендлер и реализуем метод Register, который регистрирует его в роутере. Затем создаём методы с логикой работы и сразу пишем тест API на этот метод. Проверяем, находим ошибки в сваггере. Таким образом мы создаём все методы по работе с категориями: получение и создание.


Далее создаём таким же образом хендлер для заметок. Понимаем, что забыли методы частичного обновления и удаления как для заметок, так и для категорий. Дописываем их в Swagger и реализуем методы в коде. Также обязательно тестируем Swagger в онлайн-редакторе.

Здесь надо обратить внимание на то, что методы создания сущности возвращают код ответа 201 и заголовок Location, в котором находится URL для получения сущности. Оттуда можно вытащить идентификатор созданной сущности.


В третьей части мы познакомимся с графовой базой данных Neo4j, а также будем работать над микросервисами CategoryService и APIService.

Показать полностью 5
[моё] API Программирование Golang Python Mockup Rest Видео Длиннопост
4
Evgenius81
4 года назад

Было бы интересно, почитать использование гугл таблиц через API⁠⁠

Было бы интересно, почитать использование гугл таблиц через API

[моё] API Текст Google Таблицы
10
48
wegdrt34
4 года назад

История одной интеграции с API служб доставки. Деловые линии⁠⁠

Немного айтишного нытья вам в ленту, из рубрики "Пригорело".


У меня есть небольшой интернет-магазин.


И, владея некоторыми навыками программирования в 1С, решил немного подкрутить себе конфигурацию, чтобы иметь возможность делать заказы в службе доставки и отслеживать статусы. Бог мой, я не знал, во что я влезаю. Я был радостным и жизнерадостным ребенком 30 лет, почему меня никто не предупредил, что я поседею и начну трястись при одной мысли об IT?


Я решил начать с Деловых Линий. Самые популярные потому что. Богатенькие, заказали всё у специализированной конторы, биатех.  Сходил, почитал их документацию на dev.dellin.ru, вроде с первого взгляда все понятно, приступил. Меня обнадеживал тот факт, что адреса у меня уже к тому моменту в базе сохранялись с УИДами адресных объектов согласно базе ФИАС.


Ну, думаю, ключевые данные у меня уже есть, остальное раз плюнуть. Что мне нужно клиенту? Калькулятор это потом, для начала мне надо вообще определить, есть ли по адресу клиента терминалы деловых. Казалось бы, чего проще, адрес есть, УИД ФИАС есть. Пишу запрос к АПИ. И тут....


Проблема 1. Нельзя получить терминалы в городе по УИД ФИАС. Нельзя получить и терминалы по коду КЛАДР. Нельзя вообще никак получить терминалы, кроме как одним огромным куском JSON. Гм......

История одной интеграции с API служб доставки. Деловые линии IT, Интеграция, API, 1С, Деловые Линии, Бесит, Рукожоп, Длиннопост

А, я догадался. Вы хотите, чтобы я хранил все терминалы у себя, и не дергал сервер каждый раз. Отлично. Завожу у себя в БД таблицу, начинаю парсинг JSON.


Проблема 2. В файле нет никакого указания на то, что это за город, кроме двух(!!!) их внутренних ID и КЛАДР.


КЛАДР, в 21 веке? Неподдерживаемый уже давно, устаревший и прочая... Вы серьезно? Ну.... хрен с вами. Наверное где-то можно список какой-то получить, да?


Да. Нашел метод. Он возвращает... Что? JSON? Нет, что вы. Ссылку. А по ней - файл в формате CSV....

История одной интеграции с API служб доставки. Деловые линии IT, Интеграция, API, 1С, Деловые Линии, Бесит, Рукожоп, Длиннопост

Пишу парсер, чтобы получать адресный объект по КЛАДР.

И....


Проблема 3. У ник какие-то свои коды КЛАДР.

История одной интеграции с API служб доставки. Деловые линии IT, Интеграция, API, 1С, Деловые Линии, Бесит, Рукожоп, Длиннопост
История одной интеграции с API служб доставки. Деловые линии IT, Интеграция, API, 1С, Деловые Линии, Бесит, Рукожоп, Длиннопост

WTF???? Свои коды? Твою ж мать, как мне город чертов ваш получить, где терминал ваш гребаный расположен?


Ну ок. Наверняка есть справочник городов, да? Нашел, действительно есть. Пишу запрос к API. Он возвращает.... Что? JSON? Нет. XML? Опять нет. Он возвращает URL. На файл в формате CSV:

История одной интеграции с API служб доставки. Деловые линии IT, Интеграция, API, 1С, Деловые Линии, Бесит, Рукожоп, Длиннопост

Ну хрен с ним. Качаю файл с городами, начинаю парсинг. Всего 4 поля.


Фак. Этого явно недостаточно. В России многие города существуют в десятках версий. Например есть как минимум 2 Кирова, множество Алексеевок и т.п. Охрененный справочник. Как сопоставить-то их города с настоящими? Наверное есть еще что-то?


Ищу. Есть.


Ну конечно, разработчики позаботились. Еще один файл на 40 Мб, все деревня и веси, несколько сотен тысяч записей. 7 полей, в том числе ID и КЛАДР. Окей, пишу запрос, качаю, готовлюсь сшивать два файла в одну таблицу по полю кладр. Иииии......

История одной интеграции с API служб доставки. Деловые линии IT, Интеграция, API, 1С, Деловые Линии, Бесит, Рукожоп, Длиннопост

Проблема 4. В этих файлах РАЗНЫЕ коды кладр. Разной длины, и вполне возможно что разные и не только по длине. Так как они какие-то их там собственные внутренние. Ааааааа четыреждылядская ярость, да как так-то? Зачем вам 2 разных кода КЛАДР?

Ну хорошо, сошьем по ИДшнику. И.....


Проблема 5. А вот хрен там. Это разные ИДшники. В одной таблице ИДшник - числовой, во второй - строка УИД. УИД? Откуда он там сссука? Что он вообще там делает? Зачем их столько разных? Как сшить ваши две сраные таблицы?

История одной интеграции с API служб доставки. Деловые линии IT, Интеграция, API, 1С, Деловые Линии, Бесит, Рукожоп, Длиннопост

Как, господа из биатека? Кааак сцуко вы могли наплодить столько бесполезных полей(3 ИДшника и 2 кода КЛАДР - пять!!!! полей для идентификации адресного объекта. И вроде как все должны быть уникальными), и так по-ублюдски спроектировать API, чтобы для создания локальной копии терминалов надо было заниматься вот таким вот?


сокращу свое нытье. В общем, еще два дня я трахался с их API.


1) Нет никакой возможности определить надежно адресный объект(населенный пункт), где расположен тот или иной терминал. База ФИАС уже много лет лежит и обновляется, но у биатека свой глобус пилять. Нафига давать клиенту эту информацию, да? Главное что мы в биатеке знаем, и хорошо.


2) невозможно даже просто получить нормальный список городов, где расположены терминалы. Списки приходят, но определить город при парсинге однозначно невозможно.


3) Куча ошибок в координатах. Из-за чего использование геокодера яндекса мне не помогло в коррекции ошибок


4) в апи заявлен функционал поиска по адресам - он, ну естественно, не работает. Вообще. То есть "Москва, ул. Ленина, д. 1, кв. 10" ищет, а "Москва, ул. Ленина, д. 1, оф. 10" - нет. И делай что хочешь


По итогам: API (именно в роли API) - нерабочий.


Работать начинает только если ты каким-то образом умудрился получить копию справочников себе однажды без ошибок.


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

Показать полностью 7
[моё] IT Интеграция API 1С Деловые Линии Бесит Рукожоп Длиннопост
25
1423
OnlyDarkAngel
OnlyDarkAngel
4 года назад
IT-юмор

Ошибка выполнения. Сообщите администратору⁠⁠

Ошибка выполнения. Сообщите администратору IT, API, Json, IT юмор, Картинка с текстом, Юмор

Стянуто с телеги.

Показать полностью 1
IT API Json IT юмор Картинка с текстом Юмор
42
xotonic
4 года назад

У Пикабу есть официальный API?⁠⁠

Без понятия, где это спросить

API Вопрос Meta Текст
15
Mr.Reptilod
4 года назад

Гибкая API⁠⁠

Нужна помощь опытных программеров по С++. Суть в чем.. нужно написать связный список, который будет работать с различными структурами. Структуры могу быть разного типа, но в одном списке будут структуры одного типа. Как понял, структура, например, принимает два параметра, и эти параметры могут быть различного типа (int int, float float, int char и тд.)

У самого за плечами университетский курс питона и почти решенный курс по плюсам на stepik от яндекса. В целом научился неплохо решать математические задачи с помощью кода и заполнять двумерные массивы различными способами. Но данные знания не привели меня к решению.

Поэтому я в быстром темпе как губка начал впитывать в себя различную информацию, касающуюся данной задачи. Работа с указателями, классы, шаблонные функции и классы. Информацию я находил, и даже нашел решение с конкретной структурой (ссылка внизу). Не слабо помогли видео уроки с simplecode. Решил собрать всю информацию в кучу и написал данный код с наследованием класса:

template <typename T1, typename T2> // Создаем шаблонную структуру

class Node

{

protected:

T1 data;

T2 key;

Node* next; // указатель на следующую структуру

Node* prev; //  на предыдущую

public:

//some code

};


template <typename T1, typename T2 > // создаем связный список

class List : public Node<T1,T2> // наследуем от шаблонной структуры

{

private:

Node *head; // указатель на начало списка // СТРОКА С ОШИБКОЙ (С2955)

Node *temp; // указатель на конечный узел списка

public:

List() : head(nullptr), temp(nullptr) { //первое создание связного списка

}

//some code

};

int main() {

List <int, int> a;

a.printList();

return 0;

}

Ругается ошибкой C2955 //для использования класс шаблон требуется список аргументов шаблон// (см. выше строку). Уверен, что проблема решается достаточно просто, но знаний пока не хватает. Буду на седьмом небе от счастья если люди пикабу подскажут путь к решению.

ссылки:

https://pro-prof.com/forums/topic/реализация-связных-списков...

https://www.youtube.com/watch?v=n6GMKC40gC0

Показать полностью
[моё] C++ Программирование Задача Классы API Текст
9
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии