Repository files navigation

İzmir Open Data · Java SDK

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Java 17+GradleOkHttp 3Jackson JSON


🚀 Özellikler

  • Tam Asenkron Destek:OkHttp3 altyapısı ve CompletableFuture mimarisi ile non-blocking, yüksek performanslı istekler.
  • %100 Tip Güvenliği: API yanıtları Java 17 record yapılarına (Immutable POJO) dönüştürülür. Lombok bağımlılığı olmadan temiz ve güvenli veri modelleri.
  • Kapsamlı Servis Desteği: ESHOT, İZBAN, Metro, Vapur, BİSİM, İZSU, Otopark, Etkinlikler ve daha fazlası dahil 30 farklı servis ve 100'den fazla endpoint desteği. (Tüm servislerin tam listesini incelemek için Servisler Listesi (docs/SERVICES.md) dokümanına göz atın.)
  • Dependency Injection (DI) Uyumu: Spring Boot ve diğer popüler Java framework'leri ile "Constructor Injection" uyumlu Facade yapısı.
  • Gelişmiş Hata Yönetimi: HTTP, Network ve JSON hatalarını yöneten temiz, Unchecked Custom Exception (IzmirApiException, IzmirNetworkException) hiyerarşisi.
  • Test Edilmiş Altyapı: MockWebServer kullanılarak otomatize edilmiş JUnit 5 testleri ile %100 rotalama ve HTTP coverage oranı.

📦 Kurulum

Kütüphane GitHub Packages üzerinde resmi olarak yayınlanmaktadır. Projenize eklemek için aşağıdaki adımları izleyebilirsiniz.

Gradle (Kotlin DSL)

build.gradle.kts dosyanıza GitHub Packages repository'sini ve bağımlılığı ekleyin:

repositories {
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java")
credentials {
username =System.getenv("GITHUB_ACTOR") // Veya GitHub kullanıcı adınız
password =System.getenv("GITHUB_TOKEN") // Veya Personal Access Token (read:packages yetkisine sahip)
}
}
}
dependencies {
implementation("com.atacan.izmir.opendata:izmir-open-data-java:1.0.0") // En güncel sürümü kullanın
}

Maven

pom.xml dosyanıza repository ve dependency tanımlarını ekleyin:

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.atacan.izmir.opendata</groupId>
<artifactId>izmir-open-data-java</artifactId>
<version>1.0.0</version> <!-- En güncel sürümü kullanın -->
</dependency>
</dependencies>

Not: GitHub Packages'dan kütüphane indirebilmek için Maven veya Gradle ortamınıza GitHub kimlik bilgilerinizi tanımlamanız gerekmektedir.

Eğer kaynak koddan derleyip yerel (local) ortamda kurmak isterseniz:

git clone https://github.com/AtaCanYmc/izmir-open-data-java.git
cd izmir-open-data-java
./gradlew publishToMavenLocal

📖 Temel Kullanım

SDK, modern ve akıcı bir Builder desenine sahiptir.

importcom.atacan.izmir.opendata.IzmirDataClient;
importcom.atacan.izmir.opendata.IzmirDataClientBuilder;
publicclassMain {
publicstaticvoidmain(String[] args) {
// 1. Client'ı İnşa Et (Opsiyonel olarak timeout ve API Key verebilirsiniz)IzmirDataClientclient = IzmirDataClientBuilder.builder()
.apiKey("YOUR_API_KEY_HERE") // Gerekliyse
.build();
// 2. Senkron Kullanım Örneği (BİSİM)varistasyonlar = client.bisim().getIstasyonList();
System.out.println("Toplam BİSİM İstasyonu: " + istasyonlar.kayitlar().size());
// 3. Asenkron Kullanım Örneği (ESHOT)client.eshot().getHatlarAsync().thenAccept(hatlar -> {
System.out.println("Asenkron Çekilen ESHOT Hatları: " + hatlar.size());
}).exceptionally(ex -> {
System.err.println("Hata oluştu: " + ex.getMessage());
returnnull;
});
// 4. Farklı Servislere Erişim// client.metro()...// client.izsu()...// client.vapur()...
}
}

🏗️ Mimari ve Tasarım (Docs)

Kütüphane kodlarının SOLID prensiplerine uygun olarak nasıl tasarlandığını inceleyebilirsiniz:

  1. Facade Deseni: Kullanıcılar sadece IzmirDataClient arayüzü ile muhatap olur. Karmaşık HTTP istek motoru (ApiClient) ve alt servisler (eshot(), izsu()) arkada kapsüllenmiştir.
  2. Immutable Modeller: Tüm veri taşıma objeleri (DTO'lar) Java 17 record olarak tanımlanmıştır. Bu sayede veriler değiştirilemez (Thread-Safe) ve öngörülebilir kalır.
  3. Mock Testleri: Servislerin doğru URL ve HTTP metotlarına istek attığından emin olmak için her endpoint OkHttp MockWebServer ile test edilmiştir.

🧪 Testler ve Geliştirme

Projedeki tüm API çağrı yapıları (30 farklı servis) otomatik test edilmektedir.

# Tüm JUnit 5 testlerini çalıştır
./gradlew test

📄 Lisans

Bu proje Apache License 2.0 altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakabilirsiniz.

About

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

İzmir Open Data · Java SDK

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Java 17+GradleOkHttp 3Jackson JSON


🚀 Özellikler

  • Tam Asenkron Destek:OkHttp3 altyapısı ve CompletableFuture mimarisi ile non-blocking, yüksek performanslı istekler.
  • %100 Tip Güvenliği: API yanıtları Java 17 record yapılarına (Immutable POJO) dönüştürülür. Lombok bağımlılığı olmadan temiz ve güvenli veri modelleri.
  • Kapsamlı Servis Desteği: ESHOT, İZBAN, Metro, Vapur, BİSİM, İZSU, Otopark, Etkinlikler ve daha fazlası dahil 30 farklı servis ve 100'den fazla endpoint desteği. (Tüm servislerin tam listesini incelemek için Servisler Listesi (docs/SERVICES.md) dokümanına göz atın.)
  • Dependency Injection (DI) Uyumu: Spring Boot ve diğer popüler Java framework'leri ile "Constructor Injection" uyumlu Facade yapısı.
  • Gelişmiş Hata Yönetimi: HTTP, Network ve JSON hatalarını yöneten temiz, Unchecked Custom Exception (IzmirApiException, IzmirNetworkException) hiyerarşisi.
  • Test Edilmiş Altyapı: MockWebServer kullanılarak otomatize edilmiş JUnit 5 testleri ile %100 rotalama ve HTTP coverage oranı.

📦 Kurulum

Kütüphane GitHub Packages üzerinde resmi olarak yayınlanmaktadır. Projenize eklemek için aşağıdaki adımları izleyebilirsiniz.

Gradle (Kotlin DSL)

build.gradle.kts dosyanıza GitHub Packages repository'sini ve bağımlılığı ekleyin:

repositories {
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java")
credentials {
username =System.getenv("GITHUB_ACTOR") // Veya GitHub kullanıcı adınız
password =System.getenv("GITHUB_TOKEN") // Veya Personal Access Token (read:packages yetkisine sahip)
}
}
}
dependencies {
implementation("com.atacan.izmir.opendata:izmir-open-data-java:1.0.0") // En güncel sürümü kullanın
}

Maven

pom.xml dosyanıza repository ve dependency tanımlarını ekleyin:

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.atacan.izmir.opendata</groupId>
<artifactId>izmir-open-data-java</artifactId>
<version>1.0.0</version> <!-- En güncel sürümü kullanın -->
</dependency>
</dependencies>

Not: GitHub Packages'dan kütüphane indirebilmek için Maven veya Gradle ortamınıza GitHub kimlik bilgilerinizi tanımlamanız gerekmektedir.

Eğer kaynak koddan derleyip yerel (local) ortamda kurmak isterseniz:

git clone https://github.com/AtaCanYmc/izmir-open-data-java.git
cd izmir-open-data-java
./gradlew publishToMavenLocal

📖 Temel Kullanım

SDK, modern ve akıcı bir Builder desenine sahiptir.

importcom.atacan.izmir.opendata.IzmirDataClient;
importcom.atacan.izmir.opendata.IzmirDataClientBuilder;
publicclassMain {
publicstaticvoidmain(String[] args) {
// 1. Client'ı İnşa Et (Opsiyonel olarak timeout ve API Key verebilirsiniz)IzmirDataClientclient = IzmirDataClientBuilder.builder()
.apiKey("YOUR_API_KEY_HERE") // Gerekliyse
.build();
// 2. Senkron Kullanım Örneği (BİSİM)varistasyonlar = client.bisim().getIstasyonList();
System.out.println("Toplam BİSİM İstasyonu: " + istasyonlar.kayitlar().size());
// 3. Asenkron Kullanım Örneği (ESHOT)client.eshot().getHatlarAsync().thenAccept(hatlar -> {
System.out.println("Asenkron Çekilen ESHOT Hatları: " + hatlar.size());
}).exceptionally(ex -> {
System.err.println("Hata oluştu: " + ex.getMessage());
returnnull;
});
// 4. Farklı Servislere Erişim// client.metro()...// client.izsu()...// client.vapur()...
}
}

🏗️ Mimari ve Tasarım (Docs)

Kütüphane kodlarının SOLID prensiplerine uygun olarak nasıl tasarlandığını inceleyebilirsiniz:

  1. Facade Deseni: Kullanıcılar sadece IzmirDataClient arayüzü ile muhatap olur. Karmaşık HTTP istek motoru (ApiClient) ve alt servisler (eshot(), izsu()) arkada kapsüllenmiştir.
  2. Immutable Modeller: Tüm veri taşıma objeleri (DTO'lar) Java 17 record olarak tanımlanmıştır. Bu sayede veriler değiştirilemez (Thread-Safe) ve öngörülebilir kalır.
  3. Mock Testleri: Servislerin doğru URL ve HTTP metotlarına istek attığından emin olmak için her endpoint OkHttp MockWebServer ile test edilmiştir.

🧪 Testler ve Geliştirme

Projedeki tüm API çağrı yapıları (30 farklı servis) otomatik test edilmektedir.

# Tüm JUnit 5 testlerini çalıştır
./gradlew test

📄 Lisans

Bu proje Apache License 2.0 altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakabilirsiniz.

About

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

İzmir Open Data · Java SDK

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Java 17+GradleOkHttp 3Jackson JSON


🚀 Özellikler

  • Tam Asenkron Destek:OkHttp3 altyapısı ve CompletableFuture mimarisi ile non-blocking, yüksek performanslı istekler.
  • %100 Tip Güvenliği: API yanıtları Java 17 record yapılarına (Immutable POJO) dönüştürülür. Lombok bağımlılığı olmadan temiz ve güvenli veri modelleri.
  • Kapsamlı Servis Desteği: ESHOT, İZBAN, Metro, Vapur, BİSİM, İZSU, Otopark, Etkinlikler ve daha fazlası dahil 30 farklı servis ve 100'den fazla endpoint desteği. (Tüm servislerin tam listesini incelemek için Servisler Listesi (docs/SERVICES.md) dokümanına göz atın.)
  • Dependency Injection (DI) Uyumu: Spring Boot ve diğer popüler Java framework'leri ile "Constructor Injection" uyumlu Facade yapısı.
  • Gelişmiş Hata Yönetimi: HTTP, Network ve JSON hatalarını yöneten temiz, Unchecked Custom Exception (IzmirApiException, IzmirNetworkException) hiyerarşisi.
  • Test Edilmiş Altyapı: MockWebServer kullanılarak otomatize edilmiş JUnit 5 testleri ile %100 rotalama ve HTTP coverage oranı.

📦 Kurulum

Kütüphane GitHub Packages üzerinde resmi olarak yayınlanmaktadır. Projenize eklemek için aşağıdaki adımları izleyebilirsiniz.

Gradle (Kotlin DSL)

build.gradle.kts dosyanıza GitHub Packages repository'sini ve bağımlılığı ekleyin:

repositories {
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java")
credentials {
username =System.getenv("GITHUB_ACTOR") // Veya GitHub kullanıcı adınız
password =System.getenv("GITHUB_TOKEN") // Veya Personal Access Token (read:packages yetkisine sahip)
}
}
}
dependencies {
implementation("com.atacan.izmir.opendata:izmir-open-data-java:1.0.0") // En güncel sürümü kullanın
}

Maven

pom.xml dosyanıza repository ve dependency tanımlarını ekleyin:

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.atacan.izmir.opendata</groupId>
<artifactId>izmir-open-data-java</artifactId>
<version>1.0.0</version> <!-- En güncel sürümü kullanın -->
</dependency>
</dependencies>

Not: GitHub Packages'dan kütüphane indirebilmek için Maven veya Gradle ortamınıza GitHub kimlik bilgilerinizi tanımlamanız gerekmektedir.

Eğer kaynak koddan derleyip yerel (local) ortamda kurmak isterseniz:

git clone https://github.com/AtaCanYmc/izmir-open-data-java.git
cd izmir-open-data-java
./gradlew publishToMavenLocal

📖 Temel Kullanım

SDK, modern ve akıcı bir Builder desenine sahiptir.

importcom.atacan.izmir.opendata.IzmirDataClient;
importcom.atacan.izmir.opendata.IzmirDataClientBuilder;
publicclassMain {
publicstaticvoidmain(String[] args) {
// 1. Client'ı İnşa Et (Opsiyonel olarak timeout ve API Key verebilirsiniz)IzmirDataClientclient = IzmirDataClientBuilder.builder()
.apiKey("YOUR_API_KEY_HERE") // Gerekliyse
.build();
// 2. Senkron Kullanım Örneği (BİSİM)varistasyonlar = client.bisim().getIstasyonList();
System.out.println("Toplam BİSİM İstasyonu: " + istasyonlar.kayitlar().size());
// 3. Asenkron Kullanım Örneği (ESHOT)client.eshot().getHatlarAsync().thenAccept(hatlar -> {
System.out.println("Asenkron Çekilen ESHOT Hatları: " + hatlar.size());
}).exceptionally(ex -> {
System.err.println("Hata oluştu: " + ex.getMessage());
returnnull;
});
// 4. Farklı Servislere Erişim// client.metro()...// client.izsu()...// client.vapur()...
}
}

🏗️ Mimari ve Tasarım (Docs)

Kütüphane kodlarının SOLID prensiplerine uygun olarak nasıl tasarlandığını inceleyebilirsiniz:

  1. Facade Deseni: Kullanıcılar sadece IzmirDataClient arayüzü ile muhatap olur. Karmaşık HTTP istek motoru (ApiClient) ve alt servisler (eshot(), izsu()) arkada kapsüllenmiştir.
  2. Immutable Modeller: Tüm veri taşıma objeleri (DTO'lar) Java 17 record olarak tanımlanmıştır. Bu sayede veriler değiştirilemez (Thread-Safe) ve öngörülebilir kalır.
  3. Mock Testleri: Servislerin doğru URL ve HTTP metotlarına istek attığından emin olmak için her endpoint OkHttp MockWebServer ile test edilmiştir.

🧪 Testler ve Geliştirme

Projedeki tüm API çağrı yapıları (30 farklı servis) otomatik test edilmektedir.

# Tüm JUnit 5 testlerini çalıştır
./gradlew test

📄 Lisans

Bu proje Apache License 2.0 altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakabilirsiniz.

About

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

İzmir Open Data · Java SDK

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Java 17+GradleOkHttp 3Jackson JSON


🚀 Özellikler

  • Tam Asenkron Destek:OkHttp3 altyapısı ve CompletableFuture mimarisi ile non-blocking, yüksek performanslı istekler.
  • %100 Tip Güvenliği: API yanıtları Java 17 record yapılarına (Immutable POJO) dönüştürülür. Lombok bağımlılığı olmadan temiz ve güvenli veri modelleri.
  • Kapsamlı Servis Desteği: ESHOT, İZBAN, Metro, Vapur, BİSİM, İZSU, Otopark, Etkinlikler ve daha fazlası dahil 30 farklı servis ve 100'den fazla endpoint desteği. (Tüm servislerin tam listesini incelemek için Servisler Listesi (docs/SERVICES.md) dokümanına göz atın.)
  • Dependency Injection (DI) Uyumu: Spring Boot ve diğer popüler Java framework'leri ile "Constructor Injection" uyumlu Facade yapısı.
  • Gelişmiş Hata Yönetimi: HTTP, Network ve JSON hatalarını yöneten temiz, Unchecked Custom Exception (IzmirApiException, IzmirNetworkException) hiyerarşisi.
  • Test Edilmiş Altyapı: MockWebServer kullanılarak otomatize edilmiş JUnit 5 testleri ile %100 rotalama ve HTTP coverage oranı.

📦 Kurulum

Kütüphane GitHub Packages üzerinde resmi olarak yayınlanmaktadır. Projenize eklemek için aşağıdaki adımları izleyebilirsiniz.

Gradle (Kotlin DSL)

build.gradle.kts dosyanıza GitHub Packages repository'sini ve bağımlılığı ekleyin:

repositories {
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java")
credentials {
username =System.getenv("GITHUB_ACTOR") // Veya GitHub kullanıcı adınız
password =System.getenv("GITHUB_TOKEN") // Veya Personal Access Token (read:packages yetkisine sahip)
}
}
}
dependencies {
implementation("com.atacan.izmir.opendata:izmir-open-data-java:1.0.0") // En güncel sürümü kullanın
}

Maven

pom.xml dosyanıza repository ve dependency tanımlarını ekleyin:

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.atacan.izmir.opendata</groupId>
<artifactId>izmir-open-data-java</artifactId>
<version>1.0.0</version> <!-- En güncel sürümü kullanın -->
</dependency>
</dependencies>

Not: GitHub Packages'dan kütüphane indirebilmek için Maven veya Gradle ortamınıza GitHub kimlik bilgilerinizi tanımlamanız gerekmektedir.

Eğer kaynak koddan derleyip yerel (local) ortamda kurmak isterseniz:

git clone https://github.com/AtaCanYmc/izmir-open-data-java.git
cd izmir-open-data-java
./gradlew publishToMavenLocal

📖 Temel Kullanım

SDK, modern ve akıcı bir Builder desenine sahiptir.

importcom.atacan.izmir.opendata.IzmirDataClient;
importcom.atacan.izmir.opendata.IzmirDataClientBuilder;
publicclassMain {
publicstaticvoidmain(String[] args) {
// 1. Client'ı İnşa Et (Opsiyonel olarak timeout ve API Key verebilirsiniz)IzmirDataClientclient = IzmirDataClientBuilder.builder()
.apiKey("YOUR_API_KEY_HERE") // Gerekliyse
.build();
// 2. Senkron Kullanım Örneği (BİSİM)varistasyonlar = client.bisim().getIstasyonList();
System.out.println("Toplam BİSİM İstasyonu: " + istasyonlar.kayitlar().size());
// 3. Asenkron Kullanım Örneği (ESHOT)client.eshot().getHatlarAsync().thenAccept(hatlar -> {
System.out.println("Asenkron Çekilen ESHOT Hatları: " + hatlar.size());
}).exceptionally(ex -> {
System.err.println("Hata oluştu: " + ex.getMessage());
returnnull;
});
// 4. Farklı Servislere Erişim// client.metro()...// client.izsu()...// client.vapur()...
}
}

🏗️ Mimari ve Tasarım (Docs)

Kütüphane kodlarının SOLID prensiplerine uygun olarak nasıl tasarlandığını inceleyebilirsiniz:

  1. Facade Deseni: Kullanıcılar sadece IzmirDataClient arayüzü ile muhatap olur. Karmaşık HTTP istek motoru (ApiClient) ve alt servisler (eshot(), izsu()) arkada kapsüllenmiştir.
  2. Immutable Modeller: Tüm veri taşıma objeleri (DTO'lar) Java 17 record olarak tanımlanmıştır. Bu sayede veriler değiştirilemez (Thread-Safe) ve öngörülebilir kalır.
  3. Mock Testleri: Servislerin doğru URL ve HTTP metotlarına istek attığından emin olmak için her endpoint OkHttp MockWebServer ile test edilmiştir.

🧪 Testler ve Geliştirme

Projedeki tüm API çağrı yapıları (30 farklı servis) otomatik test edilmektedir.

# Tüm JUnit 5 testlerini çalıştır
./gradlew test

📄 Lisans

Bu proje Apache License 2.0 altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakabilirsiniz.

About

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

İzmir Open Data · Java SDK

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Java 17+GradleOkHttp 3Jackson JSON


🚀 Özellikler

  • Tam Asenkron Destek:OkHttp3 altyapısı ve CompletableFuture mimarisi ile non-blocking, yüksek performanslı istekler.
  • %100 Tip Güvenliği: API yanıtları Java 17 record yapılarına (Immutable POJO) dönüştürülür. Lombok bağımlılığı olmadan temiz ve güvenli veri modelleri.
  • Kapsamlı Servis Desteği: ESHOT, İZBAN, Metro, Vapur, BİSİM, İZSU, Otopark, Etkinlikler ve daha fazlası dahil 30 farklı servis ve 100'den fazla endpoint desteği. (Tüm servislerin tam listesini incelemek için Servisler Listesi (docs/SERVICES.md) dokümanına göz atın.)
  • Dependency Injection (DI) Uyumu: Spring Boot ve diğer popüler Java framework'leri ile "Constructor Injection" uyumlu Facade yapısı.
  • Gelişmiş Hata Yönetimi: HTTP, Network ve JSON hatalarını yöneten temiz, Unchecked Custom Exception (IzmirApiException, IzmirNetworkException) hiyerarşisi.
  • Test Edilmiş Altyapı: MockWebServer kullanılarak otomatize edilmiş JUnit 5 testleri ile %100 rotalama ve HTTP coverage oranı.

📦 Kurulum

Kütüphane GitHub Packages üzerinde resmi olarak yayınlanmaktadır. Projenize eklemek için aşağıdaki adımları izleyebilirsiniz.

Gradle (Kotlin DSL)

build.gradle.kts dosyanıza GitHub Packages repository'sini ve bağımlılığı ekleyin:

repositories {
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java")
credentials {
username =System.getenv("GITHUB_ACTOR") // Veya GitHub kullanıcı adınız
password =System.getenv("GITHUB_TOKEN") // Veya Personal Access Token (read:packages yetkisine sahip)
}
}
}
dependencies {
implementation("com.atacan.izmir.opendata:izmir-open-data-java:1.0.0") // En güncel sürümü kullanın
}

Maven

pom.xml dosyanıza repository ve dependency tanımlarını ekleyin:

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.atacan.izmir.opendata</groupId>
<artifactId>izmir-open-data-java</artifactId>
<version>1.0.0</version> <!-- En güncel sürümü kullanın -->
</dependency>
</dependencies>

Not: GitHub Packages'dan kütüphane indirebilmek için Maven veya Gradle ortamınıza GitHub kimlik bilgilerinizi tanımlamanız gerekmektedir.

Eğer kaynak koddan derleyip yerel (local) ortamda kurmak isterseniz:

git clone https://github.com/AtaCanYmc/izmir-open-data-java.git
cd izmir-open-data-java
./gradlew publishToMavenLocal

📖 Temel Kullanım

SDK, modern ve akıcı bir Builder desenine sahiptir.

importcom.atacan.izmir.opendata.IzmirDataClient;
importcom.atacan.izmir.opendata.IzmirDataClientBuilder;
publicclassMain {
publicstaticvoidmain(String[] args) {
// 1. Client'ı İnşa Et (Opsiyonel olarak timeout ve API Key verebilirsiniz)IzmirDataClientclient = IzmirDataClientBuilder.builder()
.apiKey("YOUR_API_KEY_HERE") // Gerekliyse
.build();
// 2. Senkron Kullanım Örneği (BİSİM)varistasyonlar = client.bisim().getIstasyonList();
System.out.println("Toplam BİSİM İstasyonu: " + istasyonlar.kayitlar().size());
// 3. Asenkron Kullanım Örneği (ESHOT)client.eshot().getHatlarAsync().thenAccept(hatlar -> {
System.out.println("Asenkron Çekilen ESHOT Hatları: " + hatlar.size());
}).exceptionally(ex -> {
System.err.println("Hata oluştu: " + ex.getMessage());
returnnull;
});
// 4. Farklı Servislere Erişim// client.metro()...// client.izsu()...// client.vapur()...
}
}

🏗️ Mimari ve Tasarım (Docs)

Kütüphane kodlarının SOLID prensiplerine uygun olarak nasıl tasarlandığını inceleyebilirsiniz:

  1. Facade Deseni: Kullanıcılar sadece IzmirDataClient arayüzü ile muhatap olur. Karmaşık HTTP istek motoru (ApiClient) ve alt servisler (eshot(), izsu()) arkada kapsüllenmiştir.
  2. Immutable Modeller: Tüm veri taşıma objeleri (DTO'lar) Java 17 record olarak tanımlanmıştır. Bu sayede veriler değiştirilemez (Thread-Safe) ve öngörülebilir kalır.
  3. Mock Testleri: Servislerin doğru URL ve HTTP metotlarına istek attığından emin olmak için her endpoint OkHttp MockWebServer ile test edilmiştir.

🧪 Testler ve Geliştirme

Projedeki tüm API çağrı yapıları (30 farklı servis) otomatik test edilmektedir.

# Tüm JUnit 5 testlerini çalıştır
./gradlew test

📄 Lisans

Bu proje Apache License 2.0 altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakabilirsiniz.

About

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

İzmir Open Data · Java SDK

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Java 17+GradleOkHttp 3Jackson JSON


🚀 Özellikler

  • Tam Asenkron Destek:OkHttp3 altyapısı ve CompletableFuture mimarisi ile non-blocking, yüksek performanslı istekler.
  • %100 Tip Güvenliği: API yanıtları Java 17 record yapılarına (Immutable POJO) dönüştürülür. Lombok bağımlılığı olmadan temiz ve güvenli veri modelleri.
  • Kapsamlı Servis Desteği: ESHOT, İZBAN, Metro, Vapur, BİSİM, İZSU, Otopark, Etkinlikler ve daha fazlası dahil 30 farklı servis ve 100'den fazla endpoint desteği. (Tüm servislerin tam listesini incelemek için Servisler Listesi (docs/SERVICES.md) dokümanına göz atın.)
  • Dependency Injection (DI) Uyumu: Spring Boot ve diğer popüler Java framework'leri ile "Constructor Injection" uyumlu Facade yapısı.
  • Gelişmiş Hata Yönetimi: HTTP, Network ve JSON hatalarını yöneten temiz, Unchecked Custom Exception (IzmirApiException, IzmirNetworkException) hiyerarşisi.
  • Test Edilmiş Altyapı: MockWebServer kullanılarak otomatize edilmiş JUnit 5 testleri ile %100 rotalama ve HTTP coverage oranı.

📦 Kurulum

Kütüphane GitHub Packages üzerinde resmi olarak yayınlanmaktadır. Projenize eklemek için aşağıdaki adımları izleyebilirsiniz.

Gradle (Kotlin DSL)

build.gradle.kts dosyanıza GitHub Packages repository'sini ve bağımlılığı ekleyin:

repositories {
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java")
credentials {
username =System.getenv("GITHUB_ACTOR") // Veya GitHub kullanıcı adınız
password =System.getenv("GITHUB_TOKEN") // Veya Personal Access Token (read:packages yetkisine sahip)
}
}
}
dependencies {
implementation("com.atacan.izmir.opendata:izmir-open-data-java:1.0.0") // En güncel sürümü kullanın
}

Maven

pom.xml dosyanıza repository ve dependency tanımlarını ekleyin:

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.atacan.izmir.opendata</groupId>
<artifactId>izmir-open-data-java</artifactId>
<version>1.0.0</version> <!-- En güncel sürümü kullanın -->
</dependency>
</dependencies>

Not: GitHub Packages'dan kütüphane indirebilmek için Maven veya Gradle ortamınıza GitHub kimlik bilgilerinizi tanımlamanız gerekmektedir.

Eğer kaynak koddan derleyip yerel (local) ortamda kurmak isterseniz:

git clone https://github.com/AtaCanYmc/izmir-open-data-java.git
cd izmir-open-data-java
./gradlew publishToMavenLocal

📖 Temel Kullanım

SDK, modern ve akıcı bir Builder desenine sahiptir.

importcom.atacan.izmir.opendata.IzmirDataClient;
importcom.atacan.izmir.opendata.IzmirDataClientBuilder;
publicclassMain {
publicstaticvoidmain(String[] args) {
// 1. Client'ı İnşa Et (Opsiyonel olarak timeout ve API Key verebilirsiniz)IzmirDataClientclient = IzmirDataClientBuilder.builder()
.apiKey("YOUR_API_KEY_HERE") // Gerekliyse
.build();
// 2. Senkron Kullanım Örneği (BİSİM)varistasyonlar = client.bisim().getIstasyonList();
System.out.println("Toplam BİSİM İstasyonu: " + istasyonlar.kayitlar().size());
// 3. Asenkron Kullanım Örneği (ESHOT)client.eshot().getHatlarAsync().thenAccept(hatlar -> {
System.out.println("Asenkron Çekilen ESHOT Hatları: " + hatlar.size());
}).exceptionally(ex -> {
System.err.println("Hata oluştu: " + ex.getMessage());
returnnull;
});
// 4. Farklı Servislere Erişim// client.metro()...// client.izsu()...// client.vapur()...
}
}

🏗️ Mimari ve Tasarım (Docs)

Kütüphane kodlarının SOLID prensiplerine uygun olarak nasıl tasarlandığını inceleyebilirsiniz:

  1. Facade Deseni: Kullanıcılar sadece IzmirDataClient arayüzü ile muhatap olur. Karmaşık HTTP istek motoru (ApiClient) ve alt servisler (eshot(), izsu()) arkada kapsüllenmiştir.
  2. Immutable Modeller: Tüm veri taşıma objeleri (DTO'lar) Java 17 record olarak tanımlanmıştır. Bu sayede veriler değiştirilemez (Thread-Safe) ve öngörülebilir kalır.
  3. Mock Testleri: Servislerin doğru URL ve HTTP metotlarına istek attığından emin olmak için her endpoint OkHttp MockWebServer ile test edilmiştir.

🧪 Testler ve Geliştirme

Projedeki tüm API çağrı yapıları (30 farklı servis) otomatik test edilmektedir.

# Tüm JUnit 5 testlerini çalıştır
./gradlew test

📄 Lisans

Bu proje Apache License 2.0 altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakabilirsiniz.

About

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

İzmir Open Data · Java SDK

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Java 17+GradleOkHttp 3Jackson JSON


🚀 Özellikler

  • Tam Asenkron Destek:OkHttp3 altyapısı ve CompletableFuture mimarisi ile non-blocking, yüksek performanslı istekler.
  • %100 Tip Güvenliği: API yanıtları Java 17 record yapılarına (Immutable POJO) dönüştürülür. Lombok bağımlılığı olmadan temiz ve güvenli veri modelleri.
  • Kapsamlı Servis Desteği: ESHOT, İZBAN, Metro, Vapur, BİSİM, İZSU, Otopark, Etkinlikler ve daha fazlası dahil 30 farklı servis ve 100'den fazla endpoint desteği. (Tüm servislerin tam listesini incelemek için Servisler Listesi (docs/SERVICES.md) dokümanına göz atın.)
  • Dependency Injection (DI) Uyumu: Spring Boot ve diğer popüler Java framework'leri ile "Constructor Injection" uyumlu Facade yapısı.
  • Gelişmiş Hata Yönetimi: HTTP, Network ve JSON hatalarını yöneten temiz, Unchecked Custom Exception (IzmirApiException, IzmirNetworkException) hiyerarşisi.
  • Test Edilmiş Altyapı: MockWebServer kullanılarak otomatize edilmiş JUnit 5 testleri ile %100 rotalama ve HTTP coverage oranı.

📦 Kurulum

Kütüphane GitHub Packages üzerinde resmi olarak yayınlanmaktadır. Projenize eklemek için aşağıdaki adımları izleyebilirsiniz.

Gradle (Kotlin DSL)

build.gradle.kts dosyanıza GitHub Packages repository'sini ve bağımlılığı ekleyin:

repositories {
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java")
credentials {
username =System.getenv("GITHUB_ACTOR") // Veya GitHub kullanıcı adınız
password =System.getenv("GITHUB_TOKEN") // Veya Personal Access Token (read:packages yetkisine sahip)
}
}
}
dependencies {
implementation("com.atacan.izmir.opendata:izmir-open-data-java:1.0.0") // En güncel sürümü kullanın
}

Maven

pom.xml dosyanıza repository ve dependency tanımlarını ekleyin:

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.atacan.izmir.opendata</groupId>
<artifactId>izmir-open-data-java</artifactId>
<version>1.0.0</version> <!-- En güncel sürümü kullanın -->
</dependency>
</dependencies>

Not: GitHub Packages'dan kütüphane indirebilmek için Maven veya Gradle ortamınıza GitHub kimlik bilgilerinizi tanımlamanız gerekmektedir.

Eğer kaynak koddan derleyip yerel (local) ortamda kurmak isterseniz:

git clone https://github.com/AtaCanYmc/izmir-open-data-java.git
cd izmir-open-data-java
./gradlew publishToMavenLocal

📖 Temel Kullanım

SDK, modern ve akıcı bir Builder desenine sahiptir.

importcom.atacan.izmir.opendata.IzmirDataClient;
importcom.atacan.izmir.opendata.IzmirDataClientBuilder;
publicclassMain {
publicstaticvoidmain(String[] args) {
// 1. Client'ı İnşa Et (Opsiyonel olarak timeout ve API Key verebilirsiniz)IzmirDataClientclient = IzmirDataClientBuilder.builder()
.apiKey("YOUR_API_KEY_HERE") // Gerekliyse
.build();
// 2. Senkron Kullanım Örneği (BİSİM)varistasyonlar = client.bisim().getIstasyonList();
System.out.println("Toplam BİSİM İstasyonu: " + istasyonlar.kayitlar().size());
// 3. Asenkron Kullanım Örneği (ESHOT)client.eshot().getHatlarAsync().thenAccept(hatlar -> {
System.out.println("Asenkron Çekilen ESHOT Hatları: " + hatlar.size());
}).exceptionally(ex -> {
System.err.println("Hata oluştu: " + ex.getMessage());
returnnull;
});
// 4. Farklı Servislere Erişim// client.metro()...// client.izsu()...// client.vapur()...
}
}

🏗️ Mimari ve Tasarım (Docs)

Kütüphane kodlarının SOLID prensiplerine uygun olarak nasıl tasarlandığını inceleyebilirsiniz:

  1. Facade Deseni: Kullanıcılar sadece IzmirDataClient arayüzü ile muhatap olur. Karmaşık HTTP istek motoru (ApiClient) ve alt servisler (eshot(), izsu()) arkada kapsüllenmiştir.
  2. Immutable Modeller: Tüm veri taşıma objeleri (DTO'lar) Java 17 record olarak tanımlanmıştır. Bu sayede veriler değiştirilemez (Thread-Safe) ve öngörülebilir kalır.
  3. Mock Testleri: Servislerin doğru URL ve HTTP metotlarına istek attığından emin olmak için her endpoint OkHttp MockWebServer ile test edilmiştir.

🧪 Testler ve Geliştirme

Projedeki tüm API çağrı yapıları (30 farklı servis) otomatik test edilmektedir.

# Tüm JUnit 5 testlerini çalıştır
./gradlew test

📄 Lisans

Bu proje Apache License 2.0 altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakabilirsiniz.

About

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

İzmir Open Data · Java SDK

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Java 17+GradleOkHttp 3Jackson JSON


🚀 Özellikler

  • Tam Asenkron Destek:OkHttp3 altyapısı ve CompletableFuture mimarisi ile non-blocking, yüksek performanslı istekler.
  • %100 Tip Güvenliği: API yanıtları Java 17 record yapılarına (Immutable POJO) dönüştürülür. Lombok bağımlılığı olmadan temiz ve güvenli veri modelleri.
  • Kapsamlı Servis Desteği: ESHOT, İZBAN, Metro, Vapur, BİSİM, İZSU, Otopark, Etkinlikler ve daha fazlası dahil 30 farklı servis ve 100'den fazla endpoint desteği. (Tüm servislerin tam listesini incelemek için Servisler Listesi (docs/SERVICES.md) dokümanına göz atın.)
  • Dependency Injection (DI) Uyumu: Spring Boot ve diğer popüler Java framework'leri ile "Constructor Injection" uyumlu Facade yapısı.
  • Gelişmiş Hata Yönetimi: HTTP, Network ve JSON hatalarını yöneten temiz, Unchecked Custom Exception (IzmirApiException, IzmirNetworkException) hiyerarşisi.
  • Test Edilmiş Altyapı: MockWebServer kullanılarak otomatize edilmiş JUnit 5 testleri ile %100 rotalama ve HTTP coverage oranı.

📦 Kurulum

Kütüphane GitHub Packages üzerinde resmi olarak yayınlanmaktadır. Projenize eklemek için aşağıdaki adımları izleyebilirsiniz.

Gradle (Kotlin DSL)

build.gradle.kts dosyanıza GitHub Packages repository'sini ve bağımlılığı ekleyin:

repositories {
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java")
credentials {
username =System.getenv("GITHUB_ACTOR") // Veya GitHub kullanıcı adınız
password =System.getenv("GITHUB_TOKEN") // Veya Personal Access Token (read:packages yetkisine sahip)
}
}
}
dependencies {
implementation("com.atacan.izmir.opendata:izmir-open-data-java:1.0.0") // En güncel sürümü kullanın
}

Maven

pom.xml dosyanıza repository ve dependency tanımlarını ekleyin:

<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/AtaCanYmc/izmir-open-data-java</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.atacan.izmir.opendata</groupId>
<artifactId>izmir-open-data-java</artifactId>
<version>1.0.0</version> <!-- En güncel sürümü kullanın -->
</dependency>
</dependencies>

Not: GitHub Packages'dan kütüphane indirebilmek için Maven veya Gradle ortamınıza GitHub kimlik bilgilerinizi tanımlamanız gerekmektedir.

Eğer kaynak koddan derleyip yerel (local) ortamda kurmak isterseniz:

git clone https://github.com/AtaCanYmc/izmir-open-data-java.git
cd izmir-open-data-java
./gradlew publishToMavenLocal

📖 Temel Kullanım

SDK, modern ve akıcı bir Builder desenine sahiptir.

importcom.atacan.izmir.opendata.IzmirDataClient;
importcom.atacan.izmir.opendata.IzmirDataClientBuilder;
publicclassMain {
publicstaticvoidmain(String[] args) {
// 1. Client'ı İnşa Et (Opsiyonel olarak timeout ve API Key verebilirsiniz)IzmirDataClientclient = IzmirDataClientBuilder.builder()
.apiKey("YOUR_API_KEY_HERE") // Gerekliyse
.build();
// 2. Senkron Kullanım Örneği (BİSİM)varistasyonlar = client.bisim().getIstasyonList();
System.out.println("Toplam BİSİM İstasyonu: " + istasyonlar.kayitlar().size());
// 3. Asenkron Kullanım Örneği (ESHOT)client.eshot().getHatlarAsync().thenAccept(hatlar -> {
System.out.println("Asenkron Çekilen ESHOT Hatları: " + hatlar.size());
}).exceptionally(ex -> {
System.err.println("Hata oluştu: " + ex.getMessage());
returnnull;
});
// 4. Farklı Servislere Erişim// client.metro()...// client.izsu()...// client.vapur()...
}
}

🏗️ Mimari ve Tasarım (Docs)

Kütüphane kodlarının SOLID prensiplerine uygun olarak nasıl tasarlandığını inceleyebilirsiniz:

  1. Facade Deseni: Kullanıcılar sadece IzmirDataClient arayüzü ile muhatap olur. Karmaşık HTTP istek motoru (ApiClient) ve alt servisler (eshot(), izsu()) arkada kapsüllenmiştir.
  2. Immutable Modeller: Tüm veri taşıma objeleri (DTO'lar) Java 17 record olarak tanımlanmıştır. Bu sayede veriler değiştirilemez (Thread-Safe) ve öngörülebilir kalır.
  3. Mock Testleri: Servislerin doğru URL ve HTTP metotlarına istek attığından emin olmak için her endpoint OkHttp MockWebServer ile test edilmiştir.

🧪 Testler ve Geliştirme

Projedeki tüm API çağrı yapıları (30 farklı servis) otomatik test edilmektedir.

# Tüm JUnit 5 testlerini çalıştır
./gradlew test

📄 Lisans

Bu proje Apache License 2.0 altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakabilirsiniz.

About

İzmir Büyükşehir Belediyesi Açık Veri Portalı ve Open API servisleri için modern, asenkron ve tip güvenli (Java 17 Records) Enterprise Java İstemcisi.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages