GithubHelp home page GithubHelp logo

berceou / a101-bootcamp-odev2-mehmetalicakir-berceozumuygun Goto Github PK

View Code? Open in Web Editor NEW

This project forked from a101-node-js-typescript-bootcamp/a101-bootcamp-odev2-mehmetalicakir-berceozumuygun

1.0 0.0 0.0 1.56 MB

a101-bootcamp-odev2-mehmetalicakir created by GitHub Classroom

JavaScript 100.00%

a101-bootcamp-odev2-mehmetalicakir-berceozumuygun's Introduction

A101 NodeJS Bootcamp Ödev-2

İçindekiler


Ödev İsterleri

  • 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

Kullanılan Teknolojiler


JWT Entegrasyonu ve JOI Validasyonu

JSON Web Token (JWT)

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.

JWT-diagram

JOI

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;

ş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"
}

token-verildi

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.

token-girildi


Error Handler Entegrasyonu

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.

E-mail Hatası

İstenen e-mail standartlarında giriş yapılmadığında aşağıdaki hata ile karşılaşılmaktadır.

email-yanlış-girildi

Parola Hatası

İstenen parola standartı 6 karakter ile 16 karakter arasında olmalıdır.

password-yanlış-girildi



API Kullanımı

Trendyol

API kullanımı için Trendyol dökümantasyonu kullanılmıştır.

Tüm markaları getir

  GET /api/platforms/trendyol/getAllBrands

Kopyalanabilir Postman Örnek Get Sorgusu

  https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/trendyol/getAllBrands

Markayı getir

  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

Tüm kategorileri getir

  GET /api/platforms/trendyol/getAllCategories

Kopyalanabilir Postman Örnek Get Sorgusu

https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/trendyol/getAllCategories

Kategoriyi getir

  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



Ekstra Eklenen Platformlar

Ö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.

Github

API kullanımı için GitHub dökümantasyonu kullanılmıştır.

Kullancı bilgilerini getir

  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ı

Kullancı repolarını getir

  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ı

Kullancı takipçilerini getir

  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ı

Kullancının takip ettiklerini getir

  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ı

Organizasyon bilgileri getir

  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ı

Organizasyonun repolarını getir

  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ı

OpenSea

API kullanımı için OpenSea dökümantasyonu kullanılmıştır.

Tüm koleksiyonları getir

  GET /api/platforms/opensea/getAllCollections

Kopyalanabilir Postman Örnek Get Sorgusu

  https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/opensea/getAllCollections

Koleksiyon getir

  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ı

News API

API kullanımı için News dökümantasyonu kullanılmıştır.

Haber kaynaklarını getir

  GET /api/platforms/news/getSources

Kopyalanabilir Postman Örnek Get Sorgusu

  https://patika-a101bc-g12-api.mehmetalicakir.repl.co/api/platforms/news/getSources

Haber kaynaklarının tüm haberlerini getir

Kullanılabilir Haber Kaynakları:

  • 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

Amerika haberlerini kategori bazlı getir

Kullanılabilir Kategoriler:

  • 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ı

Büyük Britanya haberlerini kategori bazlı getir

Kullanılabilir Kategoriler:

  • 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ı

Avustralya haberlerini kategori bazlı getir

Kullanılabilir Kategoriler:

  • 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ı

Rusya haberlerini kategori bazlı getir

Kullanılabilir Kategoriler:

  • 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ı

Hindistan haberlerini kategori bazlı getir

Kullanılabilir Kategoriler:

  • 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ı

Fransa haberlerini kategori bazlı getir

Kullanılabilir Kategoriler:

  • 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ı

Kaynaklar

a101-bootcamp-odev2-mehmetalicakir-berceozumuygun's People

Contributors

berceou avatar mehmetalicakir avatar

Stargazers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.