belestr
Go ile yazdığım, rastegele bir söz ve sahibini getiren mikro servis:
package main
import (
"encoding/json"
"math/rand"
"net/http"
)
type Response struct {
Quote string
Author string
}
func getRandomQuote(w http.ResponseWriter, r *http.Request) {
quotes := [][]string{
{"İnsan kesin şeylerle yola başlarsa varacağı yer kuşku olacaktır, ama kuşkuyla işe başlamakla yetinirse o zaman kesinliklere ulaşacaktır.", "Francis Bacon"},
{"Bir iktidarın kötüye kullanılmasını önlemek için, iktidarın iktidarı sınırlayacağı bir düzenleme gerekir.", "Montesquieu"},
{"Gerçek, esrarengizdir, kaypaktır ve her zaman yeniden kuşatılmak ister. Özgürlük tehlikelidir; ne kadar heyecan verici ise, birlikte yaşamak o kadar güçtür.", "Albert Camus"},
{"Bir insanın ruhuna doğruluk ekmek, kör doğmuş birine görme gücünü vermek kadar olanak dışı birşeydir.", "Platon"},
{"Bilgelik, ruha yerleşti mi bir kez, kendini evvela dışa vurur insan yüzünde duraksamaksızın. İçsel huzur, dışsal huzur olarak yansır vücudun diğer organlarına.", "Hermann Hesse"},
{"Kıymet bilmeyen milletlerde kıymet yetişmez ve kıymet yetiştirmeyen milletlerin kıymeti olmaz.", "Cemil Meriç"},
{"İnsanlar korktukları kimseleri incitmektense, sevdikleri kimseleri incitmeyi yeğ tutarlar daima.", "Niccolò Machiavelli"},
}
quote := quotes[rand.Intn(len(quotes))]
js, err := json.Marshal(Response{quote[0], quote[1]})
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write(js)
}
func main() {
http.HandleFunc("/", getRandomQuote)
_ = http.ListenAndServe(":3000", nil)
}
Laravel içinde mikro servise erişim:
class Quote implements Arrayable
{
private string $quote;
private string $author;
public functon __construct(string $quote, string $author)
{
$this->quote = $quote;
$this->author = $author;
}
public function getQuote(): string
{
return $this->quote;
}
public function getAuthor(): string
{
return $this->author;
}
public function toArray(): array
{
return [
'quote' => $this->getQuote(),
'author' => $this->getAuthor(),
];
}
}
interface QuoteServiceInterface
{
public function getRandomQuote(): Quote;
}
class QuoteService implements QuoteServiceInterface
{
public function getRandomQuote(): Quote
{
$quote = Http::get("servis_adresi:3000")->json();
return new Quote($quote['Quote'], $quote['Author']);
}
}
class SomeController
{
public QuoteServiceInterface $quoteService;
public functon __construct(QuoteServiceInterface $quoteService)
{
$this->quoteService = $quoteService
}
public function someMethod(): JsonResponse
{
$quote = $this->quoteService->getRandomQuote();
return response()->json($quote->toArray());
}
}
{
"quote": "Bilgelik, ruha yerleşti mi bir kez, kendini evvela dışa vurur insan yüzünde duraksamaksızın. İçsel huzur, dışsal huzur olarak yansır vücudun diğer organlarına.",
"author": "Hermann Hesse"
}
Gördüğünüz gibi mikro servisim küçük, tek bir iş yapıyor, bağımsız, değiştirilebilir ve başka bir uygulamadan ulaşılabilir.