API Clientlarını kullanırken uygulanması gereken best practiseler nelerdir?

Selamlar :wave:
Bu makaledeki örnek üzerinden bir sorum var:
Consuming the API kısmında

pp = PixelPeeper.new

şeklinde bir kullanım mevcut. Her ihtiyacımız olduğunda bir instance yaratmak yerine bir kez yaratıp nasıl inject edebiliriz doğru kullanımına bakabileceğim bir örnek bulamadım, yardımcı olabilir misiniz?

Bu örnek üzerinden değil ama genelde olanı söyleyecek olursam aslında bir client new’leyip hep onun üzerinden devam ediyoruz. Örnek olarak buna bakılabilir. GitHub - octokit/octokit.rb: Ruby toolkit for the GitHub API

Senin örnekte belki instance methodları değil de class methodları olarak yazılsaydı new’lemek gerekmeyecekti. Direk çağırabilirdik diye düşündüm hızlıca.

GitLab/GitHub özelinde düşünürsek örneğin:
1- token ile initialize edilmesi
2- ihtiyacım olduğunda gerekli kullanıcı commitlerini etc. çekebilmem.

Fakat her seferinde Gitlab.new Github.new gibi instance oluşturunca bir şeyler doğru gelmiyor. Doğrusu bu ise bu şekilde kullanabilirim.

Sürekli new’lemek doğrusu değilse örneğin bu instance nerede oluşturulmalı: application controller? Birkaç örnekte ‘services’ klasörü oluşturanları da gördüm.


GitLab’a ait olan bu örnek aslında daha derli toplu gözüküyor: config/initializers/7_gitlab_http.rb · master · GitLab.org / GitLab · GitLab

gitlab/config/initializers/7_gitlab_http.rb

Ben dediğinin dışında farklı bir kullanım görmedim. Senin yerinde olsam nerede ihtiyacım varsa oraya koyardım Client’ı new’leme işini. Bunu service koymak daha iyi olacaktir. Çünkü kullandığın API’nin servis içine başarılı olduğu ya da fail ettiği durumlarda neler yapacağını belirtmek gerekecektir.

Gitlab gibi initializers da olur ama orası sadece uygulama ilk ayağa kalktığında bir kere çalışıyor. O yüzden kullanımına göre değişecek nasil implemente edeceğin. Public bir repoysa yaptığın şey bence yazdıktan sonra paylaşırsan daha iyi yorum yapabilir gibi geliyor bana.

Şu şekilde ekleyince rails console da kullanımı istediğim gibi oldu aslında:

# config/initializers/gitlab.rb
Gitlab.configure do |config|
  config.endpoint       = 'https://gitlab.com/api/v4'
  config.private_token  = 'TOKEN'
end

$gitlab = Gitlab

Yukarıdaki şekilde $gitlab.user diye çağırabiliyorum.

olabilir ama son yaptığın global’i yapmana gerek var mı bilemedim. buna bakabilirsin GitHub - NARKOZ/gitlab: Ruby wrapper and CLI for the GitLab REST API