"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.jsveapi/posts/posts-router.jssayfalarına gerekli kodu ekleyin. /api/postsile başlayan uç noktalarıapi/posts/posts-router.jsiç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.jsiç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
500kodu 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
idmevcut 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
500yanı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
titleya dacontentseksikse:- HTTP
400durum 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
idli post yoksa:- HTTP
404(Not Found). - şu JSON'u döndürür:
{ message: "Belirtilen ID'li gönderi bulunamadı" }.
- HTTP
-
Request bodysinde
titleya dacontentsyoksa:- 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
idli 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
500yanıtlar. - şu JSON'u döndürür:
{ message: "Gönderi silinemedi" }.
- HTTP
-
Eğer
idli 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
500yanı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ınbir dizisine çözümlenen bir Promise döndürür.findById(): bu yöntem, tek argüman olarak biridbekler ve sağlananidveyaundefineda karşılık gelen gönderiyi çözümleyen bir söz verir, eğer oidile 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 resetdbkomutunu ç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.jsondosyanı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:
corsnpm modulünü ekleyin:npm i cors.server.use(express.json())arkasınaserver.use(cors())ekleyin.