# Bir API ile çevredeki taşıma durakları nasıl aranır?

> ROOTE API ile çevredeki durakları keşfedin: koordinatlar, yarıçap, JavaScript örneği, sonuçların okunması ve hata yönetimi.

Source: https://www.roote.ai/tr/guides/api-ile-cevredekini-tasima-duraklari-nasil-arayabilirim/
Language: tr
Author: ROOTE

Bir noktanın çevresindeki durakları aramak için, o noktanın enlemini, boylamını ve bir yarıçapı yakınlık API'sine iletin. Daha sonra yanıt durumunu, dönen varlıkları ve kapsama bilgilerini kontrol edin; ardından listeyi veya haritayı gösterin.

ROOTE roote-1.0.0 sözleşmesinde, GET /v1/transit/nearby yolu yakınlardaki taşıma noktalarını keşfeder. Gerçek zamanlı kalkış veya uyarıları almaz. Bir yer arama ile bir sonraki geçişini arama iki ayrı işlemdir.

## Parametreleri tanımlama

İstek, latitude için lat ve longitude için lng kullanır. lon takma adı da sözleşmede belirtilmiştir. radius parametresi yarıçapı metrik olarak belirtir; limit istenen sonuç sayısını sınırlar. modes filtresi ulaşım modlarını belirtebilir.

| Parametre | Örnek | Anlam |
| --- | --- | --- |
| lat | 44.8378 | Arama noktasının enlemi |
| lng | -0.5792 | Arama noktasının boylamı |
| radius | 600 | İstenen yarıçap (metre olarak) |
| limit | 10 | İstenen sonuç limiti |
| modes | bus,tram | Aranan modlar |

Bu koordinatlar Bordeaux'da örnek aramalar içindir; garanti bir durak belirtmez. Mevcut sınırlar, alanlar ve koşullar için lütfen [ROOTE OpenAPI sözleşmesine](https://api.roote.ai/openapi.json) bakın.

## Sunucu tarafında ilk isteği gönderme

Burada fetch destekleyen Node.js ortamı için bir JavaScript örneği vardır. Eğer erişiminiz bir jeton kullanıyorsa, bu sunucu tarafında bir ortam değişkeninde kalır. Örnek, tarayıcıya gizli bilgi koymayı gerektirmez.

```
async function rechercherArrets(token = process.env.ROOTE_API_TOKEN) {
  const url = new URL('https://api.roote.ai/v1/transit/nearby');
  url.search = new URLSearchParams({
    lat: '44.8378',
    lng: '-0.5792',
    radius: '600',
    limit: '10',
    modes: 'bus,tram'
  }).toString();

  const headers = { Accept: 'application/json' };
  if (token) headers.Authorization = `Bearer ${token}`;

  const response = await fetch(url, {
    headers,
    signal: AbortSignal.timeout(10000)
  });
  if (!response.ok) {
    throw new Error(`Erreur HTTP ${response.status}`);
  }

  const data = await response.json();
  if (data.contract_version !== 'roote-1.0.0') {
    throw new Error('Version du contrat non reconnue');
  }
  if (!['success', 'empty', 'partial'].includes(data.status)) {
    throw new Error('Recherche indisponible');
  }
  if (!Array.isArray(data.stations)) {
    throw new Error('Réponse sans collection stations valide');
  }

  return {
    status: data.status,
    stations: data.stations,
    lines: data.lines,
    operators: data.operators,
    coverage: data.coverage,
    warnings: data.warnings,
    attributions: data.attributions,
    meta: data.meta
  };
}
```

İncelenen sözleşme, uygulanabilir politikalara göre anonim veya jetonla erişim sağlar. Haklarınızı ve erişim sınırlarını kontrol edin. HTTP yanıtı doğru olsa da içeriği doğrulamanız gerekir; üretimde, nesneleri şemaya göre doğrulamayı da kullanın.

## Varlıkları ve ilişkilerini okumak

stations koleksiyonu dönen noktaları içerir. Her biri için id, name, entity_kind, location ve distance_meters değerlerine bakın. line_ids ve operator_ids referansları, lines ve operators koleksiyonları sağlandığında bağlantı kurmak içindir.

Coğrafi mesafeyi olduğu gibi gösterin. Güzergah hesaplamadan yürüme süresine çevirmeyin. [yakın durak bulma](https://www.roote.ai/tr/guides/en-yakin-bus-ve-tramvay-duragi-nasil-bulunur/) rehberi gerçek hareketin erişim tarafından nasıl etkilenebileceğini açıklar.

Bilinmeyen bilgileri açıkça da işleyin. Sözleşmede accessibility.wheelchair unknown olabilir; bu değer ne evet ne de hayırdır. Duyurulan kalkış kapasitesi kalkış listesi oluşturmaz.

## Liste veya harita gösterimi

Arayüz öğelerinin kararlılığını sağlamak için kimliği, etiket için adı ve konum için location kullanın. Satırları, isim yerine referanslarla bağlayın.

Verilerden gelen renkler veya etiketler gösteriyorsanız, bunları doğrulanması gereken harici girişler olarak işleyin. İsimlerde HTML yerine metin kullanın.

Kaynak atıflarını koruyun ve sözleşmenin zorunlu kıldığı atıfları gösterin.

## Boş sonuç, kısmi yanıt ve hata yönetimi

empty sonucu, bilinen kapsama alanında dönen sonucun olmadığı bir aramayı anlatır. Fiziksel yokluğu kanıtlamaz. partial yanıtlar faydalı yerler içerebilir ve sınırlamaları bildirir; sonuçları ve uyarıyı uygun şekilde gösterin.

coverage, warnings ve meta içindeki uygulanan sınırları okuyun. Kısıtlı liste kapsamlı bir kapsama alanını anlatmaz. Ağ veya HTTP hatasında, sonucu 'durak yok' ile değiştirmeyin; hizmet dışı durumu gösterin.

429 kodu için yeniden deneme talimatlarını ve olası servis başlıklarını kontrol edin. Döngüsel yeniden denemelerden kaçının.

## İstasyonlar, bölgeler ve peronları ayırt etmek

entity_kind alanı farklı yer seviyelerini ayırır. Yan yana iki sonuç farklı peronlar olabilir; benzer iki isim farklı kaynaklardan olabilir.

Yerleri otomatik olarak sadece yakınlıkla birleştirmeyin. Servis tarafından belgelenen ilişkileri ve kimlikleri kullanın. Rehberimiz [GTFS, GTFS-RT ve GBFS](https://www.roote.ai/tr/guides/gtfs-gtfs-rt-ve-gbfs-farklari-nelerdir/) verilerin bağlamını açıklar.

## Üretime hazırlık

Konum veya filtreler işe yarar şekilde değiştiğinde aramaları tetikleyin. Aynı çağrıları gruplayın, zaman aşımı belirleyin ve önbelleği veri türüne ve servis koşullarına göre ayarlayın.

Yer listesi ve gerçek zamanlı kullanılabilirlik aynı tazelik gereksinimlerine sahip değildir. Aramayı kullanıcıya sunmadan önce tam, boş, kısmi ve hata yanıtlarını test edin.

## Aramayı kentsel hizmetlere genişletmek

Duraklar ve kentsel hizmetler farklı yollar kullanır. Aynı noktanın çevresinde tuvaletleri aramak için GET /v1/services/nearby yolu lat ve lon bekler, types=toilets ile. Bu yola modes=toilets göndermeyin: bu terim kart URL’sine aittir, Hizmetler filtresine değil.

Aşağıdaki JavaScript örneği 600 metrelik bir yarıçap için bir Hizmetler URL’si oluşturur. İsteği tetiklemez; yukarıda açıklanan HTTP ve sözleşme kontrollerini yeniden kullanın. Beklenen koleksiyon stations yerine services olur. service_type, location, distance_meters ve gerçekten var olan nitelikleri koruyun.

REST sözleşmesi özellikle toilets, drinking_water, fountain, wifi, parking, charging, aed ve locker’ı belgeler. MCP tarafından açıklanan türler farklı olabilir. Kabul edilen parametreler, sınırları ve erişim limitleriniz için kullanılan arayüz şemasına bakın.

Bir hizmetin öğeleri arama esnasında açık olduğunu garanti etmez. Bilinmeyen erişilebilirlik hizmetin kullanılamadığı anlamına gelmez; hata sonucu boş liste tuvaletin olmadığı kanıtı değildir. Verileri sadece bir isim ve noktayla kısaltmak yerine her aileye ait özgün tutun.

Kombine bir harita için sonuçları aileleri ve kimlikleriyle ilişkilendirin. Transit tarafından döndürülen durakları temizlemeden Hizmetler hatasını gösterin. Arama aynı noktaya odaklanmaya devam eder ancak durumlar ve kapsamlar farklı olabilir.

```
const url = new URL('https://api.roote.ai/v1/services/nearby');
url.search = new URLSearchParams({
  lat: '44.8416106', lon: '-0.5810938',
  radius: '600', limit: '10', types: 'toilets'
}).toString();
console.log(url.toString());
```

[Boş veya hata veren aramalarda tanılama yapmak](https://www.roote.ai/tr/guides/api-hatasi-ile-bos-sonuc-nasil-ayirt-edilir/)

[Filtrelenmiş bir haritayı doğrudan bir siteye entegre etmek](https://www.roote.ai/tr/guides/siteye-haritayi-mobilite-karti-olarak-ekleme/)

[Bu aramalar etrafında bir yardım aracı oluşturmak](https://www.roote.ai/tr/guides/adres-civil-etrafinda-mobilite-asistani-olusturma/)

## Sıkça Sorulan Sorular

### Nearby sonraki kalkışları sağlar mı?

Burada sunulan sözleşmede hayır. Bu yol, taşıma yerlerini keşfeder; kalkışlar ayrı kapasite ister.

### Hata sonrası boş liste gösterilebilir mi?

Kullanılamaz durumu gösterin. Hata durak yokluğunu kanıtlamaz.

### API jetonu tarayıcıya koyulabilir mi?

Gizli bilgi sunucu tarafında kalmalıdır. Uygulamanız ve hesabınız için öngörülen erişim modelini kullanın.
