Создание backend

249
02 апреля 2017, 02:40

Здравствуйте.

Прочитал много информации по данной теме, но ничего из этого меня не устроило. Занимаюсь этим в первый раз, так что не ругайтесь)

Написал проект на java - стоит задача перенести его в андроид приложение. Можно запихнуть его целиком, но было бы интереснее создать сервер, к которому бы это приложение обращалось. Все, что сейчас требуется, это передать картинку и немножко текста серверу и получить от него немножко другого текста, например, в формате Json.

Однако, я вижу какой-то темный лес с контроллерами, графической частью и т.д. Есть ли какое-то простое решение?

Answer 1

Во-первых, нужно понять, каким образом происходит взаимодействие с бэкендом. По большому счёту, выбора два: http и WebSocket. Из Вашего описания ясно, что рассматривается http: он предполагает клиент-серверное взаимодействие. То есть, сервер по определённому адресу (URL) слушает (на определённом TCP-порту), когда клиент запросит у него соединение. Таким образом, взаимодействие начинается по инициативе клиента. О протоколе HTTP в интернете очень много информации, включая спецификацию (правда, уже несколько устаревшую, но не утратившую актуальности).

Протокол http 1.1, который в настоящее время в основном используется для такого взаимодействия, текстовый. То есть, после установления соединения клиент начинает слать серверу запрос, состоящий из потока символов. Сервер как-то обрабатывает этот поток символов и возвращает клиенту поток символов в ответ. На этом всё, цикл "запрос"-"ответ" закончен. Значит, Вам нужны две библиотеки - http-сервер, умеющий слушать указанный TCP-порт и предоставлять в Ваше распоряжение текстовый поток запроса и возможность записать ответный поток. Многие серверные http-библиотеки также предоставляют удобные инструменты для анализа и разбора url-строки, http-заголовков и т.д. В простейшем случае для Java это, например, Grizzly. И http-клиент в Андроиде, который будет отправлять серверу http-запросы и получать ответы.

Собственно, JSON, который сервер должен прислать в ответ - это тоже поток символов. Но его нужно каким-то образом сформировать из тех структур данных, которые есть в доступном Вам языке программирования. В простейшем случае можно воспользоваться конкатенацией строк и значений переменных. В более сложных случаях, а также для удобства и уменьшения ошибок, используют специальные библиотеки, которые помогают выполнять преобразования из текстового JSON или XML в структуры данных языка и обратно. Значит, нужно определиться со способом этого преобразования.

Наконец, нужно где-то Ваш сервер развернуть. Удобно для этого воспользоваться, например, Heroku.

А можно в качестве бэкенда вообще взять готовое JSON-хранилище вроде Firebase

Для отлаживания бэкенда на локальном компьютере очень удобно использовать http-клиенты вроде Postman. Если есть более конкретные вопросы - задавайте.

Если есть желание начать делать что-то сложное и интересное - очень рекомендую познакомиться с Elixir-ом и Phoenix-ом на виртуальной машине Erlang.

С ростом опыта придёт понимание, что у серверной логики достаточно много задач, и в одной куче с ними разбираться неудобно. Окажется, что лучше всего отделить логику взаимодействия с внешними устройствами и протоколами (база данных, сеть, диск, очередь) и ядро, реализующее ключевую бизнес-логику системы. Тогда придёт время знакомиться с Гексагональной Архитектурой. Потом окажется, что всё это должно обрабатывать десятки или сотни запросов от разных пользователей одновременно - тогда можно будет освоить Модель Акторов. Или другую из реализованных абстракций параллельного и конкурентного программирования.

Но, конечно, чтобы написать свой первый http-бэкенд это всё не является необходимым.

READ ALSO
Как создать custom seekbar?

Как создать custom seekbar?

Здравствуйте, интересует вопрос, как создать custom seekbar, перерыл много информации, но не нашел то, что нужно

277
Помогите с задачей! Точнее подскажите с чего начать!

Помогите с задачей! Точнее подскажите с чего начать!

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

243
Поиск с учетом нескольких условий

Поиск с учетом нескольких условий

Есть текстовые поля для номера, сотрудника, субъекта, улицы, дома, некоторые из них могут быть пустые, тогда надо искать по тем которые заполненыЕсть...

243
Обрезка строки в java

Обрезка строки в java

ПриветствуюЕсть строка - "добрый день[флажек]дорогие друзъя

393