CloudPub SDK для Python и Rust

Рады представить официальные SDK для CloudPub! Теперь вы можете интегрировать функциональность CloudPub прямо в свои приложения на Rust и Python. Больше не нужно запускать отдельный клиент — всё управление туннелями доступно программно.
Зачем нужен SDK?
До сегодняшнего дня CloudPub работал через отдельное приложение — GUI или CLI. Это отлично для ручного управления, но что если вам нужно:
- Встроить туннели прямо в ваше приложение
- Динамически управлять доступом к сервисам
- Программно получать информцию и управлять туннелями
SDK решает все эти задачи элегантно и эффективно.
Python SDK: простота и гибкость
Python SDK идеально подходит для скриптов, автоматизации и интеграции с существующими Python-приложениями.
Установка
pip install cloudpub-python-sdk
Быстрый старт
from cloudpub_python_sdk import Connection, Protocol, Auth
def main():
# Создаём соединение
conn = Connection(
email="user@example.com",
password="password"
)
# Публикуем Django приложение
endpoint = conn.publish(
Protocol.HTTP,
"localhost:8000",
"Django App",
Auth.NONE
)
print(f"✅ Приложение доступно: {endpoint.url}")
# Держим туннель открытым
input("Нажмите Enter для завершения...")
if __name__ == "__main__":
main()
Интеграция с фреймворками
SDK отлично интегрируется с популярными Python фреймворками:
# FastAPI + CloudPub
from fastapi import FastAPI
from cloudpub_python_sdk import Connection, Protocol, Auth
import uvicorn
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello from CloudPub!"}
def publish_app():
conn = Connection(
email="user@example.com",
password="password"
)
endpoint = conn.publish(
Protocol.HTTP,
"localhost:8000",
"FastAPI через CloudPub",
Auth.NONE
)
print(f"API доступен: {endpoint.url}")
return conn
if __name__ == "__main__":
# Запускаем публикацию
publish_app()
# Запускаем FastAPI
uvicorn.run(app, host="localhost", port=8000)
Реальные сценарии использования
1. Временные туннели для тестирования WebHook
// Создаём туннель на время теста
async fn test_webhook() {
let mut conn = Connection::builder()
.credentials("test@example.com", "password")
.build()
.await?;
// Публикуем mock-сервер
let endpoint = conn.publish(
Protocol::Http,
"localhost:9999".to_string(),
Some("Webhook Test".to_string()),
Some(Auth::None),
None, None, None
).await?;
// Тестируем webhook
test_external_service(endpoint.as_url()).await?;
// Автоматически убираем туннель
conn.unpublish(endpoint.guid).await?;
}
2. Динамическое управление доступом
def update_access_rules(service_guid, blocked_ips):
conn = Connection(
email="admin@example.com",
password="secure_password"
)
# Получаем текущий сервис
services = conn.ls()
service = next(s for s in services if s.guid == service_guid)
# Обновляем правила
new_rules = [
{
"name": "Блокировка IP",
"filter": f"ip.src in {{{','.join(blocked_ips)}}}",
"action": "block"
}
]
conn.publish(
service.protocol,
service.local_address,
service.name,
service.auth,
rules=new_rules
)
Rust SDK: cтатическая компиляция и безопасность
Rust SDK построен на той же кодовой базе, что и основной клиент CloudPub. Это позволяет встроить его непосредственно в бинарный файл вашего приложения, статическую типизацию, безопасность и другие преимущества характерный для языка Rust.