Tenang
Dec 16 2022
.
- Apa enam batasan REST API?
- Klien — Arsitektur Server — Aturan ini memastikan pemisahan masalah. Klien mengelola masalah UI sementara Server mengelola masalah persistensi data. Sebagai imbalannya, kami mendapatkan sistem yang sangat portabel di mana sekali REST API dapat mengelola klien yang berbeda.
- Kewarganegaraan — Tidak ada data klien yang dapat disimpan di server di antara permintaan. Jika status klien relevan untuk permintaan, itu harus dikirim bersama dengan permintaan. Jika server perlu menyimpan sesi klien, itu harus disimpan dalam DB untuk jangka waktu tertentu.
- Kemampuan cache — Semua respons harus ditandai sebagai dapat di-cache atau tidak dapat di-cache. Jika respons dapat diubah terus-menerus, kita tidak boleh menyimpannya dalam cache. Kemampuan cache penting untuk kinerja REST API.
- Sistem Berlapis — Klien tidak dapat mengetahui / seharusnya tidak peduli apakah itu langsung terhubung ke server asli atau perantara di sepanjang jalan. Ini berarti REST memungkinkan Anda memiliki arsitektur sistem berlapis dan permintaan dapat dikirim melalui lapisan yang berbeda. Ini membantu keamanan dan skalabilitas (CDN, server otorisasi).
- Kode sesuai permintaan — REST API dapat mentransfer file JavaScript yang dapat dieksekusi dan komponen yang dikompilasi ke klien bila diperlukan.
- Antarmuka Seragam — Seperti namanya, harus ada antarmuka untuk sumber daya yang diekspos ke klien API. Sumber daya di server hanya boleh memiliki satu URI logis untuk mengambil atau memanipulasi sumber daya.
- berdasarkan arsitektur klien-server
- dan ingin melayani klien yang berbeda melalui protokol HTTP
- dan ingin menggunakan batasan REST yang dijelaskan di atas
############################################################################
# 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
- Gunakan OAuth2 untuk mengamankan API Anda.
- Gunakan token Pembawa yang kedaluwarsa secara otomatis untuk autentikasi (
Authorisation: Bearer f0ca4227-64c4-44e1-89e6-b27c62ac2eb6). - Memerlukan HTTPS.
- Pertimbangkan untuk menggunakan Token Web JSON .
- Terapkan penggunaan header Tipe-Konten dan Tipe-Terima bahkan jika Anda menggunakan JSON sebagai default untuk permintaan dan respons.
e.g. Content-Type: application/json Accept-Type: application/json
X-Frame-Options: deny
- Level 0: Tentukan satu URI, dan semua operasi adalah permintaan POST ke URI ini.
- Level 1: Buat URI terpisah untuk sumber daya individual.
- Tingkat 2: Gunakan metode HTTP untuk menentukan operasi pada sumber daya.
- Level 3: Gunakan hypermedia (HATEOAS, dijelaskan di bawah).
{
"healthy": true,
"dependencies":
{ "name": "moviesapi",
"healthy": true
}
}
- Untuk metode POST, URI mewakili sumber induk dari entitas baru, seperti koleksi. Misalnya, untuk membuat film baru, URI-nya mungkin
/api/movies. Server membuat entitas dan memberinya URI baru, seperti/api/movies/6812360. URI ini dikembalikan di tajuk Lokasi respons. Setiap kali klien mengirimkan permintaan, server akan membuat entitas baru dengan URI baru. - Untuk metode PUT, URI mengidentifikasi entitas. Jika sudah ada entitas dengan URI tersebut, server memperbarui entitas yang ada dengan versi yang diminta.
- Cache-Control — Jumlah maksimum detik (ttl) respons yang dapat di-cache. (
Cache-Control: public, 360atauCache-Control: no-store) - Caching yang kuat meminimalkan jumlah permintaan yang diterima server
- Pertimbangkan caching yang lemah melalui
ETagresponse-header - ETag — Gunakan hash SHA1 untuk versi sumber daya. Pastikan untuk menyertakan jenis media dalam nilai hash, karena itu membuat representasi yang berbeda. (
ETag: "2dbc2fd2358e1ea1b7a6bc08ea647b9a337ac92d"). Klien perlu mengirim header If-None-Match agar mekanisme ini berfungsi. - Caching yang lemah meminimalkan pekerjaan yang harus dilakukan server (tetapi bukan jumlah permintaan yang diterimanya)
- Aktifkan caching berbasis header pada semua proxy dan klien (misalnya NGINX, Apache, APIM) untuk meningkatkan kecepatan dan ketahanan
- Tidak ada data yang membahayakan privasi atau keamanan di URL
- Terapkan enkripsi konten pada titik akhir terjauh (di server REST, bukan proxy atau APIM)
- Saat penandatanganan konten digunakan, ini dilakukan setelah konten (opsional) dienkripsi.
- Gunakan header X-Signing-Algorithm untuk mengomunikasikan jenis penandatanganan konten (
X-Signing-Algorithm: RS256) - Gunakan header X-SHA256-Checksum untuk mengomunikasikan nilai hash SHA256 konten (
X-SHA256-Checksum: e1d58ba0a1810d6dca5f086e6e36a9d81a8d4bb00378bdab30bdb205e7473f87) - Gunakan header X-Encryption-Algorithm untuk mengomunikasikan jenis enkripsi konten (
X-Encryption-Algorithm: A128CBC-HS256)
- Konsisten (hindari kejutan dengan mudah diprediksi)
- Kohesif (hanya mencantumkan titik akhir dengan ketergantungan fungsional)
- Lengkap (memiliki semua titik akhir yang diperlukan untuk tujuannya)
- Minimal (tidak ada titik akhir lebih dari yang diperlukan untuk diselesaikan, tidak ada fitur)
- Enkapsulasi (menyembunyikan detail implementasi)
- Menjelaskan diri sendiri
- Didokumentasikan (jika penjelasan sendiri tidak cukup)
- WSO2
- Apigee
- IBM
- Perangkat Lunak AG
- Mulesoft
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































