- Ödev İsterleri
- Kullanılan Teknolojiler
- JWT-Joi Entegrasyonu ve Giriş Süreci
- Error Handler Entegrasyonu
- API Kullanımı
- Ekstra Eklenen Platformlar
- Github
- OpenSea
- News API
- Haber kaynaklarını getir
- Haber kaynaklarının tüm haberlerini getir
- Amerika haberlerini kategori bazlı getir
- Büyük Britanya haberlerini kategori bazlı getir
- Avustralya haberlerini kategori bazlı getir
- Rusya haberlerini kategori bazlı getir
- Hindistan haberlerini kategori bazlı getir
- Fransa haberlerini kategori bazlı getir
- Kaynaklar
- Node.js Boiler Plate
- JWT entegrasyonu
- JWT sign etmeden önce joi validasyon işlemleri
- Trendyol markalar "GET" endpointi
- Bu endpoint'e id veya name ile query params eklemek
- Trendyol kategoriler "GET" endpointi
- Trendyol single kategori "GET" endpointi
- Error-Handler entegrasyonu
JSON Web Token (JWT), iletişim yapan birimler arasındaki veri alışverişinin güvenli bir şekilde sağlanması için token kullanarak bilginin kendini kendini betimlediği bir yol sunan endüstri standardıdır. Oluşturulan token, dijital olarak imzalandığı için doğrulanabilir ve güvenilirdir.
Kimliklendirme işlemlerinde, kullanıcı kendi kimlik bilgileriyle başarılı bir şekilde giriş yaptığında, geriye bir JWT döndürülür ve tekrar kullanılmak üzere localStorage veya cookies gibi yapılarda JWT saklanır. Sunucudaki kaynağa erişim izni JWT’nin geçerliliği ile kontrol edilir. Eğer geçerli ise, erişim izni verilir. JWT’ler kendi kendini betimledikleri için, bütün gerekli bilgi JWT’nin içerisindedir.
Kullanıcı korunmuş bir kaynağa erişmek istediğinde, istemci tarafından Authorization başlığı içerisinde Bearer şeması kullanılarak JWT sunucuya iletilmelidir. Aşağıdaki diyagramda JWT işleyişi gösterilmiştir.
Gelen kullanıcı girişlerinin kontrol işlemlerini yapabilmek için joi paketi kullanılmaktadır.
const Joi = require('joi');
const schema = Joi.object({
email: Joi.string()
.email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } }),
password: Joi.string()
.pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),
})
Yukarıdaki kod betiği gibi bir işlem yapıldığında;
-
email
:- Geçerli bir email adresi olması
- İkili etki alanına sahip olması örneğin:
örnek.com
- Üst düzey domain (TLD) mutlaka
.com
ya da.net
içeriyor olması beklenmektedir.
-
password
:- Belirtilen regex desenini karşılaması
- String ve alfabetik karakterleri içeriyor olması beklenmektedir.
Not: Kullanıcının boş geçmesini istemediğimiz alanlara require()
eklemeliyiz.
Ödev içeriğinde joi validasyonu kullanarak;
- şifre: en az 6 karakter, en fazla ise 16 karakter
- email formatı:
[email protected]
şeklinde tanımlanmıştır.
Canlı olarak test edebilmek için,
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/user/register
adresine aşağıdaki standartı kullanarak POST isteği atabilirsiniz.
{
"email": "[email protected]",
"password": "password"
}
NOT: Token girişi yapılmadığı sürece diğer istekler çalışmamaktadır.
Verilen TOKEN'ı Postman uygulaması üzerinden
Authorization>Bearer Token
kısmına ekleyebilirsiniz.
Error Handling, senkron ve asenkron olarak meydana gelen hataların Express tarafından nasıl yakalandığı ve işlendiği ile alakalıdır. ExpressJS varsayılan olarak bir hata işleyiciyle gelir. Senkron kodda oluşan hataları yakalamak için ek bir şey yapılmasına gerek yoktur. Fakat asenkron kodlarda dönebilecek hataları Express'in yakalayıp işlemesi için next()
fonksiyonuna verilmesi gerekir.
İstenen e-mail standartlarında giriş yapılmadığında aşağıdaki hata ile karşılaşılmaktadır.
İstenen parola standartı 6 karakter ile 16 karakter arasında olmalıdır.
API kullanımı için Trendyol dökümantasyonu kullanılmıştır.
GET /api/platforms/trendyol/getAllBrands
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/trendyol/getAllBrands
GET /api/platforms/trendyol/getBrand/${Marka Adı}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/trendyol/getBrand/TRENDYOLMİLLA
Parametre | Tip | Açıklama |
---|---|---|
name |
string |
Gerekli. İlgili markanın ismi |
GET /api/platforms/trendyol/getAllCategories
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/trendyol/getAllCategories
GET /api/platforms/trendyol/getCategory/${id}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/trendyol/getCategory/411
Parametre | Tip | Açıklama |
---|---|---|
id |
number |
Gerekli. İlgili kategorinin idsi |
Ödev isterisinde bulunmasa da kalan vakitten dolayı ekip olarak pratik yapmak amacıyla ek platformlar bulunarak benzer "GET" işlemleri de ödeve eklenmiştir. Bu kısımlar ödev zorunluluğunu kapsamamaktadır.
API kullanımı için GitHub dökümantasyonu kullanılmıştır.
GET /api/platforms/github/getUser/${username}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/github/getUser/mehmetalicakir
Parametre | Tip | Açıklama |
---|---|---|
username |
string |
Gerekli. İlgili kullanıcı adı |
GET /api/platforms/github/getRepos/${username}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/github/getRepos/berceou
Parametre | Tip | Açıklama |
---|---|---|
username |
string |
Gerekli. İlgili kullanıcı adı |
GET /api/platforms/github/getFollowers/${username}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/github/getFollowers/mehmetalicakir
Parametre | Tip | Açıklama |
---|---|---|
username |
string |
Gerekli. İlgili kullanıcı adı |
GET /api/platforms/github/getFollowing/${username}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/github/getFollowing/berceou
Parametre | Tip | Açıklama |
---|---|---|
username |
string |
Gerekli. İlgili kullanıcı adı |
GET /api/platforms/github/getOrg/${organizationName}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/github/getOrg/A101-Node-js-TypeScript-Bootcamp
Parametre | Tip | Açıklama |
---|---|---|
organizationName |
string |
Gerekli. İlgili kullanıcı adı |
GET /api/platforms/github/getOrgRepos/${organizationName}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/github/getOrgRepos/A101-Node-js-TypeScript-Bootcamp
Parametre | Tip | Açıklama |
---|---|---|
organizationName |
string |
Gerekli. İlgili kullanıcı adı |
API kullanımı için OpenSea dökümantasyonu kullanılmıştır.
GET /api/platforms/opensea/getAllCollections
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/opensea/getAllCollections
GET /api/platforms/opensea/getSingleCollection/${collectionName}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/opensea/getSingleCollection/doodles-official
Parametre | Tip | Açıklama |
---|---|---|
collectionName |
string |
Gerekli. İlgili koleksiyon adı |
API kullanımı için News dökümantasyonu kullanılmıştır.
GET /api/platforms/news/getSources
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/news/getSources
- bbc-news
- cnn
- fox-news
- google-news
GET /api/platforms/news/getNewsBySource/${source}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/news/getNewsBySource/cnn
Parametre | Tip | Açıklama |
---|---|---|
source |
string |
Gerekli. Haber kaynağının id'si |
- business
- entertainment
- general
- health
- science
- sports
- technology
GET /api/platforms/news/getNewsFromUSA/${category}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/news/getNewsFromUSA/business
Parametre | Tip | Açıklama |
---|---|---|
category |
string |
Gerekli. Haber kategorisinin adı |
- business
- entertainment
- general
- health
- science
- sports
- technology
GET /api/platforms/news/getNewsFromGB/${category}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/news/getNewsFromGB/entertainment
Parametre | Tip | Açıklama |
---|---|---|
category |
string |
Gerekli. Haber kategorisinin adı |
- business
- entertainment
- general
- health
- science
- sports
- technology
GET /api/platforms/news/getNewsFromAustralia/${category}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/news/getNewsFromAustralia/general
Parametre | Tip | Açıklama |
---|---|---|
category |
string |
Gerekli. Haber kategorisinin adı |
- business
- entertainment
- general
- health
- science
- sports
- technology
GET /api/platforms/news/getNewsFromRussia/${category}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/news/getNewsFromRussia/health
Parametre | Tip | Açıklama |
---|---|---|
category |
string |
Gerekli. Haber kategorisinin adı |
- business
- entertainment
- general
- health
- science
- sports
- technology
GET /api/platforms/news/getNewsFromIndia/${category}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/news/getNewsFromIndia/science
Parametre | Tip | Açıklama |
---|---|---|
category |
string |
Gerekli. Haber kategorisinin adı |
- business
- entertainment
- general
- health
- science
- sports
- technology
GET /api/platforms/news/getNewsFromFrance/${category}
Kopyalanabilir Postman Örnek Get Sorgusu
https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/news/getNewsFromFrance/technology
Parametre | Tip | Açıklama |
---|---|---|
category |
string |
Gerekli. Haber kategorisinin adı |