Anime veya manga verisi kullanan bir proje, geliştiricilerin en sık yaptığı yan projelerden biridir. Bunun bir nedeni de bu alandaki API'lerin cömert olmasıdır: çoğu anahtar istemez, ücretsizdir ve doğrudan tarayıcıdan denenebilir.
Ancak beş farklı kaynak birbirinin kopyası değildir. Kimi katalog verisinde güçlüdür, kimi kullanıcı listelerinde, kimi de sadece manga tarafında. Yanlış seçim, projenin ortasında "bu veri bu API'de yok" duvarına toslamak demektir.
Hızlı karşılaştırma
| API | En iyi kullanım | Sorgu tipi | Kimlik doğrulama | Kullanıcı listesi |
|---|---|---|---|---|
| Jikan | MyAnimeList verisine hızlı erişim | REST | Gerekmiyor | Okuma amaçlı |
| AniList | Derin ilişkili veri, tek istekte çok alan | GraphQL | Genel sorgularda gerekmiyor | Var (OAuth ile) |
| Kitsu | Kullanıcı listeleri ve sosyal veri | REST (JSON:API) | Genel sorgularda gerekmiyor | Var |
| MangaDex | Manga, bölüm ve çeviri grupları | REST | Okumada gerekmiyor | Var |
| Shikimori | Ek künye ve topluluk verisi | REST | Genel sorgularda gerekmiyor | Var |
Jikan — en hızlı başlangıç
Jikan, MyAnimeList verisini REST üzerinden sunan resmi olmayan bir sarmalayıcıdır. Kayıt yoktur, anahtar yoktur; adres çubuğuna yazdığınız istek doğrudan JSON döndürür.
MyAnimeList'in kendi resmi API'si de mevcuttur ancak istemci kaydı ve OAuth akışı ister. Sadece katalog verisi okuyacaksanız bu ek karmaşıklığa girmenin bir karşılığı yoktur; Jikan aynı veriyi doğrudan verir.
Jikan'ın güçlü olduğu yer künye zenginliğidir. Bir anime için sezon, stüdyo, tür, karakter, ses oyuncusu ve istatistik verilerini ayrı uç noktalardan alabilirsiniz. Arama filtreleri de olgundur; türe, yıla, duruma ve puana göre süzebilirsiniz.
Sınırı mimarisinden gelir. Jikan bir sarmalayıcı olduğu için üstteki kaynağa bağımlıdır ve kendi oran sınırlarını korumak zorundadır. Dokümantasyon saniye ve dakika bazında sınırlar tanımlar; bu sınırlar toplu veri çekme işleri için dardır. Her isteği ayrı ayrı ve gecikmesiz atan bir döngü yazarsanız hızla engellenirsiniz.
İkinci sınırı da veri tazeliğidir. Sarmalayıcı katmanı cache kullanır, dolayısıyla çok yeni eklenen içerikte gecikme görebilirsiniz. Günlük yayın takibi yapan bir uygulama için bu fark önemli olabilir.
AniList — tek istekte derin veri
AniList, listedeki diğerlerinden farklı olarak GraphQL kullanır. Bu, alışkanlık gerektiren ama karşılığını veren bir tercihtir.
Farkı somut bir örnekle görmek kolaydır. Bir anime detay sayfası düşünün: başlık, açıklama, kapak görseli, türler, stüdyolar, karakterler, ilişkili yapımlar ve öneriler gösteriyorsunuz. REST tabanlı bir API'de bu genellikle beş altı ayrı istek demektir. AniList'te tek sorguda, sadece ihtiyacınız olan alanları isteyerek alırsınız.
Bu yaklaşım mobil uygulamalarda özellikle değerlidir. Az sayıda istek ve küçük yanıt boyutu, yavaş bağlantıda hissedilir bir fark yaratır.
AniList'in bir diğer güçlü yanı veri kalitesidir. Başlıklar romaji, İngilizce ve yerel yazımla ayrı ayrı gelir; eş anlamlı başlık listeleri vardır. Puanlama, popülerlik ve trend verileri düzenli günceldir.
Kullanıcı hesabı verisine erişmek — birinin izleme listesini okumak veya güncellemek — OAuth akışı gerektirir. Salt katalog verisi için kimlik doğrulama gerekmez.
Oran sınırı dakika bazındadır ve zaman zaman güncellenir. GraphQL'in doğası gereği tek istekte çok veri alabildiğiniz için pratikte bu sınıra REST kaynaklarındaki kadar sık takılmazsınız, ancak sorgu karmaşıklığının da bir maliyeti olduğunu unutmayın.
Kitsu — kullanıcı ve sosyal taraf
Kitsu, JSON:API standardını uygulayan bir REST servisidir. Bu standart, ilişkili kaynakları tek istekte dahil etme (include) ve alan seçimi gibi yetenekler sunar; GraphQL kadar esnek olmasa da düz REST'ten daha güçlüdür.
Kitsu'nun ayrıştığı yer sosyal veridir. Kullanıcı profilleri, izleme listeleri, ilerleme takibi ve kütüphane yönetimi birinci sınıf kavramlardır. Kullanıcıların kendi listelerini yönettiği bir uygulama kuruyorsanız Kitsu bu iskeleti hazır sunar.
JSON:API'nin bir maliyeti vardır: yanıt yapısı düz JSON'a alışkın geliştiriciler için ilk bakışta ağırdır. Veri, data ve included gibi bölümlere ayrılır ve ilişkileri çözmek için ek işlem gerekir. Bir istemci kütüphanesi kullanmak bu yükü ortadan kaldırır.
MangaDex — manga tarafının uzmanı
MangaDex, sadece manga odaklıdır ve o alanda listedeki en derin veriyi sunar. Seri künyesi, bölüm listeleri, çeviri grupları ve dil bazında bölüm takibi ana kavramlardır.
Manga uygulamalarında çözülmesi gereken asıl problem dil ve çeviri grubu ayrımıdır. Aynı serinin aynı bölümü farklı gruplar tarafından farklı dillere çevrilmiş olabilir. MangaDex bu ilişkiyi açıkça modeller; hangi bölümün hangi dilde hangi grup tarafından yayımlandığını sorgulayabilirsiniz.
Okuma uç noktaları anahtar gerektirmez. Kullanıcı adına işlem yapmak — okuma listesi güncellemek gibi — kimlik doğrulama ister.
Burada bir uyarı gerekir: MangaDex'in kendisi bir katalog ve dağıtım platformudur, içeriğin telif durumu karmaşıktır. API'yi künye ve keşif verisi için kullanmak ile bölüm içeriğini kendi ürününüzde yayımlamak çok farklı iki şeydir. İkincisine girmeden önce hukuki tarafı değerlendirin.
Shikimori — ek bakış açısı
Shikimori, ağırlıklı olarak Rusça konuşan topluluğa hizmet eden bir platformdur. Katalog verisi diğerleriyle büyük ölçüde örtüşür ancak bazı yapımlarda farklı künye alanları ve topluluk istatistikleri sunar.
Ana kaynağınız olarak seçmek için güçlü bir neden yoktur. Ancak bir yapımın verisini birden fazla kaynaktan doğrulamak veya eksik alanları tamamlamak istiyorsanız ikinci kaynak olarak işe yarar.
Türkçe içerik beklentisi
Bu bölüm Türkiye'den geliştirenler için önemlidir ve cevabı kısa: bu API'lerin hiçbiri Türkçe'yi birinci sınıf dil olarak desteklemez.
Başlıklar romaji, İngilizce ve Japonca yazımlarla gelir. AniList ve Kitsu eş anlamlı başlık listeleri döndürür ve bazı popüler yapımlarda Türkçe yazımlar bu listede bulunabilir, ancak bu kapsam düzensizdir ve üzerine bir ürün kuramazsınız.
Türkçe arayüzlü bir uygulama yapıyorsanız iki seçeneğiniz var. Basit yol: başlıkları orijinal haliyle gösterip, arayüz metinlerini Türkçeleştirmek. Kullanıcılar zaten orijinal başlıklara aşinadır ve bu yaklaşım çoğu projede yeterlidir. Zor yol: kendi Türkçe başlık eşleme tablonuzu tutmak. Bu, sürekli bakım gerektiren bir iştir ve ancak içerik odaklı bir üründe kendini haklı çıkarır.
Açıklama metinlerini otomatik çevirmeyi düşünüyorsanız, maliyeti ve kaliteyi önceden ölçün. Ücretsiz çeviri API'leri yazısı bu konudaki seçenekleri ve kotalarını ele alıyor.
Oran sınırı ve cache stratejisi
Bu kaynakların tamamı ücretsizdir ve büyük kısmı gönüllü emekle veya topluluk desteğiyle ayakta durur. Oran sınırlarına saygı göstermek burada sadece teknik bir gereklilik değil, aynı zamanda kaynağın sürdürülebilirliği meselesidir.
Pratikte işe yarayan yaklaşım şudur. Katalog verisini — künye, tür, stüdyo, karakter — uzun süreli cache'leyin; bu bilgiler nadiren değişir. Trend ve popülerlik verisini birkaç saatlik cache ile tutun. Kullanıcıya özel veriyi cache'lemeyin.
Toplu veri çekme işlerinde istekler arasına gecikme koyun ve mümkünse tek bir arka plan görevinde sıraya alın. Paralel yirmi istek atan bir betik, hem sizi engellenmeye götürür hem de kaynağı yorar.
Yanıtlarda gelen oran sınırı başlıklarını okuyun ve 429 yanıtı aldığınızda üstel geri çekilme uygulayın. Sabit gecikmeyle yeniden deneyen kod, sınıra takıldığında sorunu büyütür.
Hangisini seçmeli?
Hızlı bir yan proje yapıyorsanız Jikan ile başlayın; kurulum maliyeti sıfırdır.
Zengin bir detay ekranı ve iyi performans istiyorsanız AniList'in GraphQL yapısı istek sayınızı belirgin biçimde azaltır.
Kullanıcıların kendi listelerini yönettiği bir uygulama kuruyorsanız Kitsu bu modeli hazır sunar.
Sadece manga ile ilgileniyorsanız MangaDex tek doğru cevaptır; diğerleri bu derinlikte veri vermez.
Bu yazıdaki limit ve kimlik doğrulama bilgileri yayın tarihindeki resmi dokümantasyona dayanır. Topluluk kaynaklı servislerde koşullar görece sık değişebildiği için, üretime almadan önce güncel dokümanı doğrulayın.
İlgili API Deposu kayıtları
Kaynaklar
Sık Sorulan Sorular
›Anahtar almadan anime API'si kullanabilir miyim?
Evet. Jikan, AniList'in genel sorguları, Kitsu ve MangaDex'in okuma uç noktaları anahtar gerektirmez. Anahtar yalnızca kullanıcı hesabı adına işlem yaparken gerekir.
›MyAnimeList verisine nasıl erişilir?
Jikan, MyAnimeList verisini resmi olmayan bir sarmalayıcı üzerinden sunar ve kayıt gerektirmez. MyAnimeList'in kendi resmi API'si de vardır fakat istemci kaydı ve OAuth akışı ister.
›Türkçe anime başlıkları hangi API'de bulunur?
Hiçbiri Türkçe'yi birinci sınıf dil olarak desteklemez. AniList ve Kitsu eş anlamlı başlık listeleri döndürür ve bazı yapımlarda Türkçe yazımlar bu listede yer alabilir, ancak bu kapsam güvenilir değildir. Türkçe başlık gerekiyorsa kendi eşleme tablonuzu tutmanız gerekir.
›GraphQL mi REST mi seçmeliyim?
Tek ekranda çok sayıda ilişkili alan gösteriyorsanız AniList'in GraphQL yapısı istek sayısını ciddi biçimde azaltır. Basit arama ve künye ekranlarında Jikan veya Kitsu'nun REST yapısı daha hızlı kurulur.
›Bu API'leri ticari projede kullanabilir miyim?
Koşullar kaynağa göre değişir ve bir kısmı topluluk projesidir. Ticari kullanımdan önce her kaynağın kendi kullanım koşullarını okuyun; içeriğin telif durumu da ayrıca değerlendirilmelidir.