"Blog posts" üzerinde CRUD işlemleri gerçekleştiren bir API oluşturmak için "Node.js" ve "Express" kullanın.
Bu projeyi forkladıktan sonra bilgisayarınıza klonlayın.
- Aşağıda listelenen uç noktaları uygulamak için
index.js
,api/server.js
veapi/posts/posts-router.js
sayfalarına gerekli kodu ekleyin. /api/posts
ile başlayan uç noktalarıapi/posts/posts-router.js
içindeki ayrı bir Ekspres Yönlendiriciye ayırın.- API'yi aşağıdaki yolları işleyecek şekilde yapılandırın. Bu uç noktalardan bazıları,
api/posts/posts-model.js
içinde sağlanan veritabanı yardımcılarına birden fazla çağrı yapılmasını gerektirebilir.
N | Metod | Uçnokta | Açıklama |
---|---|---|---|
1 | GET | /api/posts | Veritabanında bulunan tüm post nesnelerinin bir dizisini döndürür |
2 | GET | /api/posts/:id | belirtilen kimliğe sahip post nesnesini döndürür |
3 | POST | /api/posts | İstek gövdesi içinde gönderilen bilgileri kullanarak bir post oluşturur ve yeni oluşturulan post nesnesini döndürür |
4 | PUT | /api/posts/:id | İstek gövdesinden alınan verileri kullanarak postu belirtilen id ile günceller ve orijinali değil değiştirilen postu döndürür |
5 | DELETE | /api/posts/:id | Belirtilen kimliğe sahip gönderiyi kaldırır ve silinmiş gönderi nesnesini döndürür |
6 | GET | /api/posts/:id/comments | Belirtilen kimliğe sahip gönderiyle ilişkili tüm yorum nesnelerinin bir dizisini döndürür |
- Veritabanından postlar alınırken hata oluşursa:
- HTTP
500
kodu yanıtlar. - Şu JSON'u döndürür:
{ message: "Gönderiler alınamadı" }
.
- HTTP
İstemci /api/posts/:id
'e GET
isteği yaparsa :
-
Eğer post belirtilen
id
mevcut değilse:- HTTP
404
(Not Found) yanıtlar. - şu JSON'u döndürür:
{ message: "Belirtilen ID'li gönderi bulunamadı" }
.
- HTTP
-
post veritabanından alınırken bir hata oluşursa:
- HTTP
500
yanıtlar. - şu JSON'u döndürür:
{ message: "Gönderi bilgisi alınamadı" }
.
- HTTP
İstemci /api/users
e POST
isteği atarsa:
-
Request bodyde
title
ya dacontents
eksikse:- HTTP
400
durum kodu (Bad Request). - şu JSON'u cevapta döndürür:
{ message: "Lütfen gönderi için bir title ve contents sağlayın" }
.
- HTTP
-
Eğer post bilgileri geçerliyse:
- Yeni post i veritabanına kaydedin.
- HTTP
201
(Created) durum kodu. - yeni oluşturulan post nesnesini döndürün.
-
post kaydedilirken hata oluştuysa:
- HTTP
500
(Server Error) durum kodu cevaplar. - Şu JSON'u döndürün:
{ message: "Veritabanına kaydedilirken bir hata oluştu" }
.
- HTTP
İstemci /api/posts/:id
'e PUT
isteği atarsa :
-
Belirtilen
id
li post yoksa:- HTTP
404
(Not Found). - şu JSON'u döndürür:
{ message: "Belirtilen ID'li gönderi bulunamadı" }
.
- HTTP
-
Request bodysinde
title
ya dacontents
yoksa:- HTTP
400
(Bad Request). - şu JSON'u döndürür:
{ message: "Lütfen gönderi için title ve contents sağlayın" }
.
- HTTP
-
post i güncellerken bir hata oluşursa:
- HTTP
500
. - şu JSON'u döndürür:
{ message: "Gönderi bilgileri güncellenemedi" }
.
- HTTP
-
Eğer gönderi varsa ve girilen bilgiler geçerliyse:
- "istek gövdesi"nde gönderilen yeni bilgileri kullanarak veritabanındaki gönderi nesnesini güncelleyin.
- HTTP
200
(OK). - güncellenen post nesnesini döndürür.
İstemci /api/posts/:id
'e DELETE
isteği yaparsa :
-
Eğer belirtilen
id
li post mevcut değilse:- HTTP
404
(Not Found) yanıtlar. - şu JSON'u döndürür:
{ message: "Belirtilen ID li gönderi bulunamadı" }
.
- HTTP
-
Eğer gönderi veritabanından silinirken hata oluşursa:
- HTTP
500
yanıtlar. - şu JSON'u döndürür:
{ message: "Gönderi silinemedi" }
.
- HTTP
-
Eğer
id
li post mevcut değilse:- HTTP
404
(Not Found). - şu JSON'u döndürür:
{ message: "Girilen ID'li gönderi bulunamadı." }
.
- HTTP
-
Eğer comments ler döndürülemiyorsa:
- HTTP
500
yanıtlar. - Şu JSON'u döndürür:
{ message: "Yorumlar bilgisi getirilemedi" }
.
- HTTP
data
klasörü, test posts
ile doldurulmuş bir veritabanı içerir.
Veritabanı erişimi api/posts
klasörü içerisinde yer alan posts-model.js
dosyası kullanılarak yapılacaktır:
find()
: find çağrısı, veritabanında bulunan tümpostların
bir dizisine çözümlenen bir Promise döndürür.findById()
: bu yöntem, tek argüman olarak birid
bekler ve sağlananid
veyaundefined
a karşılık gelen gönderiyi çözümleyen bir söz verir, eğer oid
ile gönderi bulunmazsa.insert()
: onu bir 'post' nesnesinden geçirerek insert'i çağırmak, onu veritabanına ekleyecek ve eklenen gönderinin 'id' ile bir nesneye çözümlenen bir Promise döndürecektir. Nesne şöyle görünür:{ id: 123 }
.update()
: iki bağımsız argüman kabul eder, ilki güncellenecek gönderinin "id"si ve ikincisi uygulanacak "değişikliklere" sahip bir nesnedir. Güncellenen kayıtların sayısını çözümleyen bir Promise döndürür. Sayı 1 ise, kaydın doğru bir şekilde güncellendiği anlamına gelir.remove()
: remove yöntemi, ilk bağımsız değişkeni olarak bir "id" kabul eder ve gönderiyi veritabanından başarıyla sildikten sonra, silinen kayıt sayısına çözümlenen bir Promise verir.findPostComments()
: findPostComments, ilk bağımsız değişkeni olarak bir "postId" kabul eder ve gönderi kimliğiyle ilişkili gönderideki tüm yorumların bir dizisini çözen bir Promise verir.
Veritabanındaki bir Blog Gönderisi aşağıdaki yapıya sahiptir:
{
title: "The post title", // String, required
contents: "The post contents", // String, required
created_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
updated_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
}
Veritabanındaki bir Yorum aşağıdaki yapıya sahiptir:
{
text: "The text of the comment", // String, required
post_id: "The id of the associated post", // Integer, required, must match the id of a post entry in the database
created_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
updated_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
}
npm run resetdb
komutunu çalıştırarak veritabanını sıfırlayabilirsiniz.- Postman veya HTTPie kullanarak çalışmanızı manuel olarak test edin. "npm test" komutuyla otomatik testleri çalıştırın.
- Ek dosyalar oluşturabilirsiniz ancak mevcut dosyaları veya klasörleri taşımayın veya yeniden adlandırmayın.
- Ek kitaplıklar yüklemek veya ek komut dosyaları eklemek dışında
package.json
dosyanızı değiştirmeyin. Mevcut kütüphaneleri güncellemeyin. - Uygulamanızda en iyi yöntemleri izlemeniz ve temiz ve profesyonel kodlar yazmanız önemlidir.
cors
ara yazılımını etkinleştirmeniz gerekecek:
cors
npm modulünü ekleyin:npm i cors
.server.use(express.json())
arkasınaserver.use(cors())
ekleyin.