Middle
Ön uç ve arka uç geliştirme arasında sınırı nerede çiziyorsunuz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Sınır, API seviyesinde gerçekleşir. Backend şunlardan sorumludur:
- İş mantığı
- Veri yönetimi (veritabanı, önbellek)
- Yetkilendirme ve kimlik doğrulama (ayrı bir hizmette değilse)
- API (REST, GraphQL vb.) aracılığıyla veri ve fonksiyonlar sağlama
Frontend ise:
- Kullanıcı arayüzü (HTML, CSS)
- Kullanıcıyla etkileşim (JavaScript/Ruby ile Hotwire/etc.)
- API üzerinden veri tüketme ve fonksiyon çağrısı
- Backend'ten alınan verilerin gösterimi
Klasik yaklaşımlarda, backend HTML sayfaları üretir, frontend sadece etkileşimi ekler. SPA (Single Page Application) ile sınır daha belirgindir, çünkü etkileşim tamamen API üzerinden gerçekleşir.
Örnek:
# app/controllers/api/users_controller.rb
# Backend: Kullanıcıyı veritabanından alıp frontend için biçimlendirme
class Api::UsersController < ApplicationController
def show
user = User.find(params[:id])
render json: user.as_json(only: [:id, :name, :email])
end
end
// app/javascript/packs/user_profile.js
// Frontend: Backend'ten veri isteği yapıp gösterme
document.addEventListener('DOMContentLoaded', () => {
fetch(`/api/users/${userId}`) // userId frontend'den alınır
.then(response => response.json())
.then(data => {
document.getElementById('user-name').innerText = data.name;
document.getElementById('user-email').innerText = data.email;
});
});
Hibrit yaklaşımlarda, Hotwire gibi, render mantığının bir kısmı backend'e kaydırılabilir, ancak etkileşim yine belirli protokoller (örneğin Turbo Streams) aracılığıyla veri veya HTML parçacıklarının iletimiyle kurulur.
# app/controllers/posts_controller.rb
# Backend: Turbo Stream için HTML render etme
class PostsController < ApplicationController
def create
@post = Post.new(post_params)
if @post.save
render turbo_stream: turbo_stream.append(:posts, partial: 'posts/post', locals: { post: @post })
else
# Hata işleme
end
end
private
def post_params
params.require(:post).permit(:body)
end
end
<!-- _post.html.erb -->
<!-- Turbo Stream aracılığıyla frontend'e gönderilen HTML parçası -->
<div>
<%= post.body %>
</div>
Temel prensip: Backend veri ve servisleri sağlar, frontend bunları tüketir ve kullanıcıya gösterir.