Huzurlu
Dec 16 2022
.
- REST API'nin altı kısıtlaması nelerdir?
- İstemci — Sunucu Mimarisi — Bu kural endişelerin ayrılmasını sağlar. İstemci, UI endişelerini yönetirken, Sunucu veri kalıcılığı endişelerini yönetir. Karşılığında, bir kez REST API'nin farklı istemcileri yönetebildiği, oldukça taşınabilir bir sistem elde ediyoruz.
- Vatansızlık — İstemler arasında hiçbir istemci verisi sunucuda depolanamaz. İstemci durumu isteklerle alakalıysa, isteklerle birlikte gönderilmelidir. Sunucunun istemci oturumlarını kaydetmesi gerekiyorsa, belirli bir süre için bir DB'ye kaydedilmesi gerekir.
- Önbelleğe alınabilirlik — Tüm yanıtlar önbelleğe alınabilir veya önbelleğe alınamaz olarak işaretlenmelidir. Yanıt sürekli değiştirilebiliyorsa, onları önbelleğe almamalıyız. Önbelleğe alınabilirlik, REST API'nin performansı için önemlidir.
- Katmanlı Sistem — İstemci, orijinal sunucuya veya yol boyunca aracıya doğrudan bağlı olup olmadığını bilemez / umursamamalıdır. Bu, REST'in katmanlı bir sistem mimarisine sahip olmanızı sağladığı ve talebin farklı katmanlar aracılığıyla gönderilebileceği anlamına gelir. Bu, güvenlik ve ölçeklenebilirliğe (CDN, yetkilendirme sunucusu) yardımcı olur.
- İsteğe bağlı kod — REST API, gerektiğinde yürütülebilir JavaScript dosyalarını ve derlenmiş bileşenleri istemciye aktarabilir.
- Tekdüzen Arayüz — Adından da anlaşılacağı gibi, API istemcilerine maruz kalan kaynaklar için bir arayüz olmalıdır. Sunucudaki bir kaynağın, kaynağı almak veya değiştirmek için yalnızca bir mantıksal URI'si olmalıdır.
- istemci-sunucu mimarisine dayalı
- ve farklı istemcilere HTTP protokolü aracılığıyla hizmet vermek istiyor
- ve yukarıda açıklanan REST kısıtlamalarını kullanmak istiyorum
############################################################################
# Movie Apis Definitions #
############################################################################
# Code completion support is available so start typing for available options.
swagger: '2.0'
# This is your document metadata
info:
version: "1.0.1"
title: The movie api
# Describe your paths here
paths:
# This is a path endpoint. Change it.
/movies:
# This is a HTTP operation
get:
# Describe this verb here. Note: you can use markdown
description: Returns all movies
operationId: getMovies
# Expected responses for this operation:
responses:
# Response code
200:
description: Successful response
# A schema describing your response object.
# Use JSON Schema format
schema:
title: ArrayOfMovies
type: array
items:
$ref: '#/definitions/movie'
default:
description: Error
schema:
$ref: 'https://zalando.github.io/problem/schema.yaml#/Problem'
post:
description: Add a new movie
operationId: addMovie
parameters:
- name: movie
in: body
description: The new movie
required: true
schema:
$ref: '#/definitions/movie'
responses:
'201':
description: The new movie
schema:
$ref: '#/definitions/movie'
default:
description: Error
schema:
$ref: 'https://zalando.github.io/problem/schema.yaml#/Problem'
/movies/{id}:
parameters:
- name: id
in: path
description: ID of the movie
required: true
type: integer
format: int64
get:
description: Returns a single movie
operationId: getMovieById
responses:
200:
description: Successful response
schema:
$ref: '#/definitions/movie'
default:
description: Error
schema:
$ref: 'https://zalando.github.io/problem/schema.yaml#/Problem'
put:
description: Update an existing movie
operationId: updateMovieById
parameters:
- name: movie
in: body
description: The movie
required: true
schema:
$ref: '#/definitions/movie'
responses:
'200':
description: The new movie
schema:
$ref: '#/definitions/movie'
default:
description: Error
schema:
$ref: 'https://zalando.github.io/problem/schema.yaml#/Problem'
delete:
description: Delete a movie
operationId: deleteMovieById
responses:
'204':
description: Movie deleted
default:
description: Error
schema:
$ref: 'https://zalando.github.io/problem/schema.yaml#/Problem'
definitions:
movie:
type: object
required:
- id
- title
properties:
id:
type: integer
format: int64
title:
type: string
ratings:
type: object
properties:
criticsScore:
type: integer
minimum: 0
maximum: 100
audienceScore:
type: integer
minimum: 0
maximum: 100
criticsConsensus:
type: string
abridgedDirectors:
type: array
items:
type: string
abridgedCast:
type: array
items:
$ref: '#/definitions/cast'
posters:
$ref: '#/definitions/posters'
cast:
type: object
required:
- id
- name
properties:
id:
type: integer
format: int64
name:
type: string
characters:
type: array
items:
type: string
posters:
properties:
thumbnail:
type: string
format: uri
profile:
type: string
format: uri
detailed:
type: string
format: uri
original:
type: string
format: uri
- API'nizin güvenliğini sağlamak için OAuth2'yi kullanın .
- Kimlik doğrulama için otomatik olarak süresi dolan bir Taşıyıcı belirteci kullanın (
Authorisation: Bearer f0ca4227-64c4-44e1-89e6-b27c62ac2eb6). - HTTPS gerektir.
- JSON Web Belirteçlerini kullanmayı düşünün .
- Hem istekler hem de yanıtlar için varsayılan olarak JSON kullanıyor olsanız bile Content-Type ve Accept-Type üstbilgilerinin kullanımını zorunlu kılın.
e.g. Content-Type: application/json Accept-Type: application/json
X-Frame-Options: deny
- Düzey 0: Bir URI tanımlayın ve tüm işlemler bu URI'ye POST istekleridir.
- Seviye 1: Bireysel kaynaklar için ayrı URI'ler oluşturun.
- Seviye 2: Kaynaklar üzerindeki işlemleri tanımlamak için HTTP yöntemlerini kullanın.
- Seviye 3: Hiper ortam kullanın (aşağıda açıklanan HATEOAS).
{
"healthy": true,
"dependencies":
{ "name": "moviesapi",
"healthy": true
}
}
- Bir POST yöntemi için URI, koleksiyon gibi yeni varlığın bir üst kaynağını temsil eder. Örneğin, yeni bir film oluşturmak için URI olabilir
/api/movies. Sunucu varlığı oluşturur ve ona/api/movies/6812360. Bu URI, yanıtın Konum başlığında döndürülür. İstemci her istek gönderdiğinde, sunucu yeni bir URI ile yeni bir varlık oluşturur. - Bir PUT yöntemi için, URI varlığı tanımlar. Bu URI'ye sahip bir varlık zaten varsa, sunucu mevcut varlığı istekteki sürümle günceller.
- Cache-Control — Bir yanıtın önbelleğe alınabileceği maksimum saniye sayısı (ttl). (
Cache-Control: public, 360veyaCache-Control: no-store) - Güçlü önbelleğe alma, bir sunucunun aldığı istek sayısını en aza indirir
ETagYanıt başlığı aracılığıyla zayıf önbelleğe almayı düşünün- ETag — Bir kaynağın sürümü için bir SHA1 karması kullanın. Ortam türünü hash değerine eklediğinizden emin olun, çünkü bu farklı bir gösterim oluşturur. (
ETag: "2dbc2fd2358e1ea1b7a6bc08ea647b9a337ac92d"). Bu mekanizmanın çalışması için istemcinin bir If-None-Match başlığı göndermesi gerekir. - Zayıf önbellekleme, bir sunucunun yapması gereken işi en aza indirir (ancak aldığı istek sayısını değil)
- Hızı ve sağlamlığı artırmak için tüm proxy'lerde ve istemcilerde (örn. NGINX, Apache, APIM) üstbilgi tabanlı önbelleğe almayı etkinleştirin
- URL'lerde gizlilik veya güvenlikten ödün vermeyen veriler yok
- En uzak uç noktalarda içerik şifrelemesi uygulayın (proxy'ler veya APIM'de değil, REST sunucusunda)
- İçerik imzalama kullanıldığında, bu, içerik (isteğe bağlı olarak) şifrelendikten sonra yapılır.
- İçerik imzalama türünü bildirmek için X-Signing-Algorithm başlığını kullanın (
X-Signing-Algorithm: RS256) X-SHA256-Checksum: e1d58ba0a1810d6dca5f086e6e36a9d81a8d4bb00378bdab30bdb205e7473f87İçeriğin ( ) SHA256 hash değerini iletmek için X-SHA256-Checksum başlığını kullanın- İçerik şifreleme türünü bildirmek için X-Encryption-Algorithm başlığını kullanın (
X-Encryption-Algorithm: A128CBC-HS256)
- Tutarlı (öngörülebilir olarak sürprizlerden kaçının)
- Uyumlu (yalnızca işlevsel bağımlılığa sahip uç noktaları listeler)
- Eksiksiz (amacı için gerekli tüm son noktalara sahiptir)
- Minimal (tamamlanması gerekenden daha fazla son nokta yok, özellik yok)
- Kapsülleme (uygulama ayrıntılarını gizleme)
- kendini açıklayan
- Belgelendi (kendi kendine açıklama yeterli değilse)
- WSO2
- Apigee
- IBM
- Yazılım AG
- katır yumuşaklığı
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































