Ekşi sözlük için geliştirilmiş node.js tabanlı server API. Ekşisözlükten çekilen veriler json formatında kullanıcıya geri döndürülür. 5 controller içerisinde 7 tane endpoint barındıran bu API'yi kolaylıkla kendi bilgisayarınızda çalışır hale getirebilirsiniz.
doc [Heroku dokümantasyon]
client [Heroku örnek vue.js client'ı]
Terminalde sırasıyla şu komutları çalıştırın:
$ git clone https://github.com/coluck/eksisozluk-api.git
$ cd eksisozluk-api
$ npm i
$ npm run serve
API'nin demo'suna buradan ulaşabilirsiniz: eksisozluk-api: documantation demo eksisozluk-api: client demo
Heroku'nun ücretsiz paketi ile deploy edilmiştir. Çok fazla yüklenmeyin :)
method | endpoint | açıklama |
---|---|---|
get | api/basliklar |
gündemdeki başlıkları getirir |
get | api/baslik/:slug |
spesifik bir başlığı getirir |
get | api/debe |
debe'yi getirir (yavaş çalışır) |
get | api/entry/:id |
spesifik bir entry'i getirir |
get | api/biri/:nick |
bir suser'ı getirir(TODO: calismiyor ) |
get | api/ara/:query |
arama sonucunu getirir |
get | api/autocomplete/:query |
otomatik tamamlama özelliği |
API tamamen GET metot'larından oluşmaktadır. eksisozluk.com'dan çektiği veri'leri uygun bir json formatında geri döner.
API'yi çalıştırdıktan sonra /doc
adresinden API'nin dokümantasyonuna ulaşabilirsiniz. Buradaki doküman apidoc modülü ile oluşturuldu.
Dokümantasyonu tekrar derlemek için şu komutu çalıştırın:
npm install --save-dev
(apidoc modülünü indirmek için)
npm run docg
Ayarları config.js dosyası ile düzenleyebilirsiniz. useMongo ve cacheAPI değişkenleri sadece debe controller'ı için kullanılır.(bkz: notlar)
require("dotenv").config();
const config = {
apiEnpoint: "/api",
serveDoc: true,
serveClientEx: true,
docEndpoint: "/doc",
clientEndpoint: "/",
useMongo: process.env.USE_MONGO || false,
cacheAPI: process.env.CACHE_API || false,
limitAPI: process.env.LIMIT_API || false,
};
".env.example" dosyasının '.example' uzantısını silerek saklanması gereken verileri bu dosyada tutabilirsiniz.
USE_MONGO=true
CACHE_API=true
DB_URL=mongodb://127.0.0.1:27017/db_name
Bu repo'nun içinde bu API'yi tüketen/kullanan bir frontend web uygulaması mevcut. Bu uygulama vue.js ile kodlandı. "/public/dist" dizininde derlenmiş hali var. Vue.js uygulamasının kaynak koduna buradan ulaşabilirsiniz: eksisozluk-api-client
Debe'yi getiren fonksiyon tüm entrileri tek tek çektiği için yavaş çalışmaktadır. Bu sorunu çözebilmek için 2 yöntem kullanıldı.
-
Debe'yi mongodb'ye kaydetmek ve çekmek. (env dosyasında mongodb'nin url adresi düzenlenmeli ve "useMongo=true" ataması yapılmalı. Böylelikle günlük debe, veritabanına kayıt edilir.)
-
Debe objesini cache'lemek. (node-cache modülü kullanıldı.)
Bu yöntemler ile debe.getDebe fonksiyonu ilk çağrıdan sonraki çağrılarda performans artışı sağlar.
Aşağıdakiler memnuniyetle karşılanır.
- Hata bildirimi
- Pull request
- Sunucu sağlama