Java SDK
Координаты Maven com.dashamail:dashamail-java. HTTP — через
java.net.http.HttpClient (в JDK с 11-й версии); JSON — через
крошечный кодек внутри самой библиотеки, поскольку в JDK своего нет.
| Maven | com.dashamail:dashamail-java:1.0.0 |
| Gradle | implementation 'com.dashamail:dashamail-java:1.0.0' |
| Требования | Java 11+ |
| Пакет | com.dashamail.sdk, ресурсы — в com.dashamail.sdk.resources |
| Исходники | github.com/DashaMail/dashamail-java |
| Лицензия | MIT |
В JDK нет ни javax.json, ни любого другого JSON-парсера в
стандартной поставке. Чтобы не тащить Jackson, Gson или org.json как
зависимость, библиотека несёт свой минимальный класс
com.dashamail.sdk.internal.Json — только для разбора и сборки
тел запросов и ответов этого API.
Быстрый старт #
import com.dashamail.sdk.DashaMailClient;
import com.dashamail.sdk.DashaMailResponse;
DashaMailClient dashamail = new DashaMailClient("YOUR_API_KEY");
DashaMailResponse balance = dashamail.account().balance();
System.out.println(balance.get("balance"));
DashaMailResponse created = dashamail.lists().create("Newsletter");
Map<String, Object> fields = new HashMap<>();
fields.put("merge_1", "Иван");
dashamail.lists().addMember(created.get("list_id"), "subscriber@example.com", fields);
Map<String, Object> params = new HashMap<>();
params.put("subject", "Добро пожаловать");
dashamail.transactional().send(
"subscriber@example.com",
"sender@yourdomain.com",
"<p>Спасибо за подписку!</p>",
params
);
Ресурсы #
DashaMailClient — фасад с одним геттером на каждый раздел API,
типы — в com.dashamail.sdk.resources. Вызовы синхронные
(блокирующие) и возвращают DashaMailResponse (оборачивает
data как Map<String, Object> или
List<Object>, реализует Iterable) либо бросают
DashaMailApiException. Необязательные параметры — завершающий
Map<String, Object>; у каждого такого метода есть перегрузка
без этого аргумента.
| Геттер | Класс | Раздел |
|---|---|---|
.lists() | resources.Lists | Адресные базы |
.segments() | resources.Segments | Сегменты |
.campaigns() | resources.Campaigns | Рассылки, включая A/B-тесты |
.automations() | resources.Automations | Автоматизации |
.workflows() | resources.Workflows | Сценарии визуального конструктора |
.templates() | resources.Templates | Шаблоны |
.reports() | resources.Reports | Отчёты, включая результаты A/B |
.transactional() | resources.Transactional | Транзакционные письма |
.account() | resources.Account | Аккаунт |
.dialogs() | resources.Dialogs | Диалоги |
.router() | resources.Router | Обработка входящих |
.images() | resources.Images | Изображения |
Публичные типы вроде DashaMailResponse и
DashaMailApiException намеренно с префиксом DashaMail —
короткие имена вроде Response легко столкнутся с типами из других
библиотек в вашем проекте. Все исключения непроверяемые
(RuntimeException), вызывающий код не обязан их объявлять.
Пагинация #
int start = 0;
while (true) {
Map<String, Object> page = new HashMap<>();
page.put("start", start);
page.put("limit", 100);
DashaMailResponse members = dashamail.lists().members(listId, page);
for (Object member : members) {
Map<?, ?> dict = (Map<?, ?>) member;
System.out.println(dict.get("email"));
}
start += members.getLimit() != null ? members.getLimit() : 0;
if (!members.hasMore()) break;
}
Ошибки #
Каждый неуспешный ответ бросает подкласс DashaMailApiException,
выбранный по HTTP-статусу. У любого исключения есть getApiCode() —
тот же код, что в справочнике ошибок,
getHttpStatus() и getDetails().
| HTTP | Класс исключения |
|---|---|
| 401 | DashaMailAuthenticationException |
| 402 | DashaMailPaymentRequiredException |
| 403 | DashaMailAuthorizationException |
| 404 | DashaMailNotFoundException |
| 409 | DashaMailConflictException |
| 413 | DashaMailPayloadTooLargeException |
| 422 | DashaMailValidationException |
| 429 | DashaMailRateLimitException — есть getRetryAfter() |
| 5xx | DashaMailServerException |
Если ответ вообще не пришёл (обрыв сети, таймаут) — бросается
DashaMailNetworkException, отдельно от ошибок самого API.
Изображения #
// Готовый файл на диске — без ручного base64:
DashaMailResponse result = dashamail.images().optimizeFile("/path/to/banner.png");
// Сырые байты в ответ вместо base64 в JSON:
DashaMailBinaryResponse binary = dashamail.images().optimizeFileBinary("/path/to/banner.png");
binary.saveTo("/path/to/banner-optimized.png");
Полная документация — в README репозитория. Вернуться к обзору всех SDK.