API Platform Türkçe Çeviri

API Platform’a Giriş: Hiper Ortam ve GraphQL API, Yönetici ve Progresif Web Uygulaması

API Platformu, herhangi bir framework veya dilde en gelişmiş API platformudur.

— Fabien Potencier (Symfony’nin kurucusu), SymfonyCon 2017

API Platformu, API odaklı projelere adanmış güçlü ama kullanımı kolay bir full stack framework’tür. Sektör lideri standartları (JSON-LD ve Hydra, GraphQL, OpenAPI …) destekleyen tam özellikli API’ler oluşturmak için bir PHP kütüphanesi içerir, bu API’ları bir çırpıda (admin, PWA ve mobil uygulama oluşturucu, hypermedia client…) ve anında bulutta geliştirmek ve deploy için güzel bir Docker ve Kubernetes entegrasyonu ile birlikte gönderilir.

Başlamanın en kolay ve güçlü yolu API Platformu dağıtımını indirmektir. API Platformu şunları içerir:

>sunucu tarafı bileşen, Symfony 4 mikroframework ve Doktrin ORM (isteğe bağlı) dahil olmak üzere bir API iskeleti

>React Admin üzerine kurulmuş API Platformunun (veya herhangi bir Hydra API’ının) hiper medya özelliklerinden yararlanan dinamik bir JavaScript yöneticisi

>herhangi bir Hydra API’sinden tek bir komutla React, Vue, Native React, Next.js, Quasar ve Vuetify uygulamalarını yapılandıracak bir client oluşturucu

>projeyi tek bir komutla önyüklemek için Docker tabanlı bir kurulum sağlamak:

  • API ve JavaScript uygulamaları için sunucular

Framework’ün nasıl çalıştığını keşfetmek için, bir bookshop’ı yöneteceğimiz bir API oluşturacağız.

Tam özellikli bir API, bir yönetici arabirimi ve progressive Web Uygulaması oluşturmak için, yalnızca API’mizin genel veri modelini tasarlamamız ve onu Plain Old PHP Objects olarak işlememiz gerekir.

API Platformu, bir dizi yerleşik özelliğe sahip bir web API’sini ortaya çıkarmak ve belgelemek için bu model sınıflarını kullanır:

>(CRUD) kaynakları oluşturma, alma, güncelleme ve silme

>veri doğrulama

>sayfalama

>filtreleme

>sıralama

>hypermedia / HATEOAS ve içerik anlaşması desteği (JSON-LD ve Hydra, JSON: API, HAL …)

>GraphQL desteği

>Güzel kullanıcı arayüzü ve makine tarafından okunabilir belgeler (Swagger UI / OpenAPI, GraphiQL …)

>kimlik doğrulama (Temel HTTP, çerezlerin yanı sıra uzantılar aracılığıyla JWT ve OAuth)

>CORS headers

>geçersiz kılma tabanlı HTTP caching

>ve temelde modern API’ler oluşturmak için gereken her şey.

Başlamadan önce bir şey daha var: API Platform dağıtımı Symfony framework’u içerdiğinden, çoğu Symfony paketiyle (eklenti) uyumludur ve bu sağlam temel tarafından sağlanan çok sayıda uzantı noktasından yararlanır (events, DIC …) . API’lerinize özel veya hizmet odaklı API endpointleri, JWT veya OAuth kimlik doğrulaması, HTTP önbelleğe alma, posta gönderme veya eşzamanlı olmayan işler gibi özellikler eklemek basittir.

Framework’ü Kurmak

API Platform Dağıtımını Kullanma (Önerilen)
API Platformu dağıtım .tar.gz dosyasını indirerek başlayın veya sağladığımız şablondan bir GitHub repository’si oluşturun. İçeriğini çıkardıktan sonra, ortaya çıkan dizin API Platformu proje yapısını içerir. Kendi kodunuzu ve yapılandırmanızı içine ekleyeceksiniz.

Not: Olası izin sorunlarına neden olabileceğinden .zip dosyasını kullanmaktan kaçının.

API Platformu, konteyner’a alınmış bir geliştirme ortamını kurup çalıştırmayı kolaylaştıran bir Docker kurulumuyla birlikte gelir. Bilgisayarınızda zaten Docker yoksa, onu kurmanın tam zamanı.

Mac’te yalnızca Mac için Docker desteklenir. Benzer şekilde, Windows’ta yalnızca Docker for Windows desteklenir. Docker Machine, kutudan çıkar çıkmaz desteklenmez.

Bir terminal açın ve proje iskeletinizi içeren dizine gidin. Docker Compose kullanarak tüm hizmetleri başlatmak için aşağıdaki komutu çalıştırın:

$ docker-compose pull # Download the latest versions of the pre-built images
$ docker-compose up -d # Running in detached mode

Bu, aşağıdaki hizmetleri başlatır:

Konteyner loglarını görmek için şunu çalıştırın:

$ docker-compose logs -f # follow the logs

Önceden yapılandırılmış bir Docker birimi sayesinde proje dosyaları, yerel ana makineniz ile konteyner arasında otomatik olarak paylaşılır. Bu, projenizin dosyalarını tercih ettiğiniz IDE veya kod düzenleyiciyi kullanarak yerel olarak düzenleyebileceğiniz anlamına gelir, konteynerda şeffaf bir şekilde dikkate alınacaktır. IDE’lerden bahsetmişken, API Platformu uygulamaları geliştirmek için en sevdiğimiz yazılım, harika Symfony ve Php Inspections eklentilerine sahip PHPStorm’dur. Onları bir deneyin, neredeyse her şey için otomatik tamamlama ve harika kalite analizi elde edeceksiniz.

API Platform dağıtımı, test amacıyla dummy bir entity ile birlikte gelir: api/src/Entity/Greeting.php. Daha sonra kaldıracağız.

PHP ekosistemine alışkınsanız, muhtemelen bu test entity’sinin kalıcılık sistemi olarak endüstri lideri Doctrine ORM kitaplığını kullandığını tahmin etmişsinizdir. API Platformu dağıtımında gönderilir. Doctrine ORM, dağıtımla birlikte gönderilen köprü sayesinde bir API Platform projesinde verileri kalıcı hale getirmenin ve sorgulamanın en kolay yoludur. Performans ve geliştirme kolaylığı için optimize edilmiştir. Örneğin, Doctrine kullanılırken API Platformu, uygun JOIN cümlelerini ekleyerek oluşturulan SQL sorgularını otomatik olarak optimize edebilir. Aynı zamanda çok sayıda güçlü yerleşik filtre sağlar. Doctrine ORM ve köprüsü, PostgreSQL, MySQL, MariaDB, SQL Server, Oracle ve SQLite dahil olmak üzere en popüler RDBMS’yi destekler. Ayrıca gönderilen Doctrine MongoDB ODM isteğe bağlı desteği de vardır.

Bununla birlikte, API Platformunun kalıcılık sisteminden% 100 bağımsız olduğunu unutmayın. Doğru arayüzleri uygulayarak ihtiyaçlarınıza (NoSQL veritabanları veya uzak web hizmetleri dahil) en uygun olanı (ları) kullanabilirsiniz. API Platformu, aynı projede birkaç kalıcılık sisteminin birlikte kullanılmasını bile destekler.

Symfony Flex ve Composer’ı Kullanma (İleri Düzey Kullanıcılar)

Alternatif olarak, API Platformu sunucu bileşeni doğrudan yerel bir makineye de kurulabilir. Bu yöntem yalnızca dizin yapısı ve kurulu bağımlılıklar üzerinde tam kontrol isteyen ileri düzey kullanıcılar için önerilir.

İyi bir giriş için SymfonyCasts’te dağıtım olmadan API Platformunun nasıl kurulacağını izleyin.

Bu öğreticinin geri kalanı, resmi dağıtımı kullanarak API Platformunu kurduğunuzu varsayar. Sizin durumunuzsa doğrudan bir sonraki bölüme geçin.

API Platformunun resmi bir Symfony Flex tarifi vardır. Composer’ı kullanarak herhangi bir Flex uyumlu Symfony uygulamasından kolayca yükleyebileceğiniz anlamına gelir:

# Create a new Symfony Flex project
$ composer create-project symfony/skeleton bookshop-api
# Enter the project folder
$ cd bookshop-api
# Install the API Platform's server component in this skeleton
$ composer req api

Ardından, veritabanını ve şemasını oluşturun:

$ bin/console doctrine:database:create
$ bin/console doctrine:schema:create

Ve yerleşik PHP sunucusunu başlatın:

# Built-in PHP server
$ php -S 127.0.0.1:8000 -t public

Tüm JavaScript bileşenleri, npm veya Yarn ile kurulabilen bağımsız kitaplıklar olarak da mevcuttur.

Not: API Platformunu bu şekilde yüklerken, API / api / yolu olarak gösterilecektir. API belgelerini görmek için http: // localhost: 8000 / api / açmanız gerekir. API Platformunu doğrudan bir Apache veya NGINX web sunucusuna dağıtıyorsanız ve bu bağlantıyı açarken 404 hatası alıyorsanız, belirli web sunucusu yazılımınız için yeniden yazma kurallarını etkinleştirmeniz gerekecektir.

Hazır!

Favori web tarayıcınızda https: // localhost’u açın:

Framework’ü yüklerken bu konteyner için oluşturulan kendinden imzalı TLS sertifikasını kabul etmek için tarayıcınıza bir güvenlik istisnası eklemeniz gerekir. HTTPS aracılığıyla kullanılabilen diğer tüm hizmetler için bu adımı tekrarlayın.

Daha sonra muhtemelen bu karşılama ekranını Progressive Web Uygulamanızın ana sayfasıyla değiştireceksiniz. Bir Aşamalı Web Uygulaması oluşturmayı planlamıyorsanız, docker-compose.yaml’deki client / dizini ve ilgili satırları kaldırabilirsiniz (bunu şimdi yapmayın, bu konteyneri bu öğreticide daha sonra kullanacağız).

“HTTPS API” düğmesini tıklayın veya https://localhost:8443/: adresine gidin.

API Platformu, API’nin OpenAPI formatında (eski adıyla Swagger olarak biliniyordu) bir açıklamasını sunar. Ayrıca, Open API belgelerini oluşturan güzel bir arayüz olan Swagger UI’nin özelleştirilmiş bir sürümünü de entegre eder. Ayrıntılarını görüntülemek için bir işleme tıklayın. Ayrıca doğrudan kullanıcı arayüzünden API’ye istek gönderebilirsiniz. POST işlemini kullanarak yeni bir Karşılama kaynağı oluşturmayı deneyin, ardından GET işlemini kullanarak erişin ve son olarak DELETE işlemini yürüterek onu silin. Bir web tarayıcısı kullanarak herhangi bir API URL’sine erişirseniz, API Platformu bunu algılar (Accept HTTP başlığını tarayarak) ve ilgili API isteğini UI’de görüntüler. Https: // localhost: 8443 / greetings adresine göz atarak kendiniz deneyin. Accept üstbilgisi tercih edilen biçim olarak text / html içermiyorsa, bir JSON-LD yanıtı gönderilir (yapılandırılabilir davranış).

Öyleyse, ham verilere erişmek istiyorsanız, iki seçeneğiniz vardır:

>Doğru Accept başlığını ekleyin (veya güvenliği önemsemiyorsanız hiçbir Accept üstbilgisini ayarlamayın) — API istemcileri yazarken tercih edilir
>Kaynağın uzantısı olarak istediğiniz biçimi ekleyin — yalnızca debug amacıyla

Örneğin, JSON-LD’deki geri alınan kaynakları listesini almak için https: // localhost: 8443 / greetings.jsonld adresine veya ham JSON’daki verileri almak için https: // localhost: 8443 / greetings.json adresine gidin.

Tabii ki, API’yi sorgulamak için favori HTTP istemcinizi de kullanabilirsiniz. Postman’e düşkünüz. API Platformu ile mükemmel bir şekilde çalışır, yerel Açık API desteğine sahiptir, işlevsel testleri kolayca yazmanıza olanak tanır ve iyi ekip işbirliği özelliklerine sahiptir.

Kendi Modelinizi Getirin

API Platformu projeniz artık% 100 işlevseldir. Kendi veri modelimizi ortaya çıkaralım. Bookshop API’miz basit başlayacak. Bir Kitap kaynak türü ve bir Gözden Geçirme türünden oluşacaktır.

Kitapların bir kimliği, ISBN’si, başlığı, açıklaması, yazarı, yayın tarihi vardır ve bir inceleme listesiyle ilgilidir. İncelemelerin bir kimliği, bir derecelendirmesi (0 ile 5 arasında), bir gövdesi, bir yazarı, bir yayın tarihi vardır ve bir kitapla ilgilidir.

Bu veri modelini bir dizi Düz Eski PHP Nesnesi (POPO) olarak tanımlayalım ve Doctrine ORM tarafından sağlanan ek açıklamaları kullanarak veritabanı tablolarıyla eşleştirelim:

<?php
// api/src/Entity/Book.php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
* A book.
*
* @ORM\Entity
*/
class Book
{
/**
* @var int The id of this book.
*
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;

/**
* @var string|null The ISBN of this book (or null if doesn't have one).
*
* @ORM\Column(nullable=true)
*/
public $isbn;

/**
* @var string The title of this book.
*
* @ORM\Column
*/
public $title;

/**
* @var string The description of this book.
*
* @ORM\Column(type="text")
*/
public $description;

/**
* @var string The author of this book.
*
* @ORM\Column
*/
public $author;

/**
* @var \DateTimeInterface The publication date of this book.
*
* @ORM\Column(type="datetime")
*/
public $publicationDate;

/**
* @var Review[] Available reviews for this book.
*
* @ORM\OneToMany(targetEntity="Review", mappedBy="book", cascade={"persist", "remove"})
*/
public $reviews;

public function __construct()
{
$this->reviews = new ArrayCollection();
}

public function getId(): ?int
{
return $this->id;
}
}
<?php
// api/src/Entity/Review.php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* A review of a book.
*
* @ORM\Entity
*/
class Review
{
/**
* @var int The id of this review.
*
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;

/**
* @var int The rating of this review (between 0 and 5).
*
* @ORM\Column(type="smallint")
*/
public $rating;

/**
* @var string the body of the review.
*
* @ORM\Column(type="text")
*/
public $body;

/**
* @var string The author of the review.
*
* @ORM\Column
*/
public $author;

/**
* @var \DateTimeInterface The date of publication of this review.
*
* @ORM\Column(type="datetime")
*/
public $publicationDate;

/**
* @var Book The book this review is about.
*
* @ORM\ManyToOne(targetEntity="Book", inversedBy="reviews")
*/
public $book;

public function getId(): ?int
{
return $this->id;
}
}

İpucu: — api-resource seçeneği sayesinde Symfony MakerBundle’ı da kullanabilirsiniz:

$ docker-compose exec php bin/console make:entity --api-resource

Gördüğünüz gibi, karşılık gelen PHPDoc ile iki tipik PHP nesnesi vardır (PHPDoc’larında bulunan entitylerin ve özelliklerin açıklamalarının API belgelerinde görüneceğini unutmayın).

Doctrine’nin annotationsları bu enetityleri veritabanındaki tablolarla eşler. Annotationslar, kodun gruplanmasına ve yapılandırmaya izin verdiklerinden kullanışlıdır, ancak sınıfları meta verilerinden ayırmak istiyorsanız, XML veya YAML eşlemelerine geçebilirsiniz. Onlar da destekleniyor.

Entitylerin Doctrine ORM ile nasıl eşleneceği hakkında projenin resmi belgelerinde veya Kévin’in “Doctrine ORM ile PHP’de Kalıcılık” kitabında daha fazla bilgi edinin.

Basitlik uğruna, bu örnekte public properties kullandık (id hariç, aşağıya bakın). API Platformu ve Doctrine ayrıca erişimci yöntemlerini (alıcılar / ayarlayıcılar) destekler, isterseniz bunları kullanın. Id için özel bir özellik ve yalnızca okunabilir olduğu gerçeğini zorlamak için id için bir alıcı kullandık (id, @ORM\GeneratedValue ek açıklaması nedeniyle RDMS tarafından üretilecektir). API Platform ayrıca UUID’ler için birinci sınıf desteğe sahiptir. Otomatik olarak artırılan id ler yerine bunları muhtemelen kullanmalısınız.

Ardından api/src/Entity/Greeting.php. dosyasını silin. Bu demo entity artık kullanışlı değil. Son olarak, Doctrine’e veritabanı tablolarının yapısını yeni veri modelimizle senkronize etmesini söyleyin:

$ docker-compose exec php bin/console doctrine:schema:update --force

Php konteyneri, API uygulamanızın bulunduğu yerdir. Docker-compose exec php ile bir komutun önüne eklenmesi, verilen komutun bu konteynerde çalıştırılmasına izin verir. Hayatınızı kolaylaştırmak için bir alias oluşturmak isteyebilirsiniz.

Daha sonra, veritabanının yapısını değiştirirken Doctrine Migrations kullanmak isteyeceksiniz.

Artık ısrar edebileceğiniz ve sorgulayabileceğiniz çalışan bir veri modelimiz var. Bir entity sınıfına karşılık gelen CRUD yeteneklerine sahip bir API endpoint oluşturmak için, onu @ApiResource adlı bir annotation ile işaretlememiz yeterlidir:

<?php
// api/src/Entity/Book.php

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiResource;

/**
* ...
*
* @ApiResource
*/
class Book
{
// ...
}
<?php
// api/src/Entity/Review.php

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiResource;

/**
* ...
*
* @ApiResource
*/
class Review
{
// ...
}

API’miz (neredeyse) hazır! Geliştirme ortamını yüklemek için https: // localhost: 8443'e göz atın (harika Symfony profil oluşturucusu dahil).

2 kaynak türümüz için mevcut işlemler kullanıcı arayüzünde görünür.

Kitap kaynağı türünün POST işlemini tıklayın, “Try it out” seçeneğini tıklayın ve aşağıdaki JSON belgesini istek gövdesi olarak gönderin:

{
"isbn": "9781782164104",
"title": "Persistence in PHP with the Doctrine ORM",
"description": "This book is designed for PHP developers and architects who want to modernize their skills through better understanding of Persistence and ORM.",
"author": "Kévin Dunglas",
"publicationDate": "2013-12-01"
}

Bookshop API’si aracılığıyla yeni bir kitap kaynağı kaydettiniz! API Platformu, JSON belgesini otomatik olarak karşılık gelen PHP entity sınıfının bir örneğine dönüştürür ve onu veritabanında kalıcı hale getirmek için Doctrine ORM’yi kullanır.

Varsayılan olarak API, GET (koleksiyonlarda ve öğelerde alma), POST (oluşturma), PUT (değiştirme), PATCH (kısmi güncelleme) ve DELETE (kendinden açıklamalı) HTTP yöntemlerini destekler. İstemediklerinizi devre dışı bırakmayı unutmayın!

Koleksiyonda GET işlemini deneyin. Eklediğimiz kitap görünüyor. Koleksiyon 30'dan fazla öğe içerdiğinde, sayfalandırma otomatik olarak gösterilecek ve bu tamamen yapılandırılabilir. Koleksiyona bazı filtreler eklemek ve sıralar eklemek ilginizi çekebilir.

Bazı anahtarların oluşturulan JSON yanıtında (@id, @type, @context …) @ simgesiyle başladığını fark etmiş olabilirsiniz. API Platformu, JSON-LD formatının (ve Hydra uzantısının) tam desteğiyle birlikte gelir. Birkaç satırda keşfedeceğimiz API Platform Yöneticisi gibi otomatik keşfedilebilirlik özellikleriyle akıllı istemciler oluşturmaya olanak tanır. Açık veriler, SEO ve birlikte çalışabilirlik için kullanışlıdır, özellikle Schema.org gibi açık sözlüklerle kullanıldığında ve yapılandırılmış verilerinize Google’a erişim izni vermenize veya Apache Jena kullanarak SPARQL’deki API’lerinizi sorgulamanıza olanak tanır).

JSON-LD’nin yeni bir API için en iyi varsayılan biçim olduğunu düşünüyoruz. Bununla birlikte, API Platformu, GraphQL (buna ulaşacağız), JSON API, HAL, ham JSON, XML (deneysel) ve hatta YAML ve CSV dahil olmak üzere birçok diğer formatı yerel olarak destekler. Diğer biçimler için desteği de kolayca ekleyebilirsiniz ve varsayılan olarak hangi biçimin etkinleştirileceğini ve kullanılacağını seçmek size bağlıdır.

Şimdi, İnceleme kaynağı için POST işlemini kullanarak bu kitap için bir inceleme ekleyin:

{
"book": "/books/1",
"rating": 5,
"body": "Interesting book!",
"author": "Kévin",
"publicationDate": "September 21, 2016"
}

Not: Composer kullanarak mevcut bir projede API Platformu kurduysanız, anahtar kitabın içeriği ”/api/books/1" olmalıdır

Bu istekle ilgili belirtilmesi gereken iki ilginç şey var:

Önce ilişkilerle nasıl çalışılacağını öğrendik. Bir hiper ortam API’sinde, her kaynak (benzersiz) bir IRI ile tanımlanır. Bir URL, geçerli bir IRI’dır ve API Platformunun kullandığı şeydir. Her JSON-LD belgesinin @id özelliği, onu tanımlayan IRI’yi içerir. Bu belgeye diğer belgelerden referans vermek için bu IRI’yi kullanabilirsiniz. Önceki talepte, daha önce oluşturduğumuz kitabın IRI’sini, onu oluşturduğumuz İnceleme ile ilişkilendirmek için kullandık. API Platformu, IRI’larla başa çıkmak için yeterince akıllıdır. Bu arada, belgeleri referans göstermek yerine gömmek isteyebilirsiniz (örneğin, HTTP isteklerinin sayısını azaltmak için). Müşterinin yalnızca ihtiyaç duyduğu özellikleri seçmesine bile izin verebilirsiniz.

Diğer ilginç şey, API Platformunun tarihleri ​​nasıl işlediğidir (publishDate özelliği). API Platformu, PHP tarafından desteklenen herhangi bir tarih biçimini anlar. Üretimde RFC 3339'da belirtilen formatı kullanmanızı şiddetle tavsiye ederiz, ancak görebileceğiniz gibi 21 Eylül 2016 dahil en yaygın formatlar kullanılabilir.

Özetlemek gerekirse, herhangi bir entity’i ortaya çıkarmak istiyorsanız, yapmanız gereken tek şey:

Bir paketin Entity dizinine koyun
Doctrine kullanıyorsanız, veritabanı ile eşleştirin
@ApiPlatform\Core\Annotation\ApiResource annotation ile işaretleyin
Daha kolay olabilir mi ?!

Verileri Doğrulama

Şimdi /books ‘a aşağıdaki gövde ile bir POST isteği göndererek başka bir kitap eklemeyi deneyin:

{
"isbn": "2815840053",
"description": "Hello",
"author": "Me",
"publicationDate": "today"
}

Hata, başlığı eklemeyi unuttuk. Yine de isteği gönderin, aşağıdaki mesajla bir 500 hatası almalısınız:

An exception occurred while executing 'INSERT INTO book [...] VALUES [...]' with params [...]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'title' cannot be null

Hatanın otomatik olarak JSON-LD’de serialize edildiğini ve hatalar için Hydra Core sözlüğüne saygı duyduğunu fark ettiniz mi? Client’ın hatadan yararlı bilgileri kolayca çıkarmasına olanak tanır. Her neyse, istek gönderirken SQL hatası almak kötüdür. Bu, geçerli bir girdi kullanmadığımız anlamına gelir ve bu kötü ve tehlikeli bir uygulamadır.

API Platformu, Symfony Validator Bileşeni ile bir köprü ile birlikte gelir. Entitylerimize sayısız doğrulama kısıtlamasından bazılarını eklemek (veya özel olanlar oluşturmak), kullanıcı tarafından gönderilen verileri doğrulamak için yeterlidir. Veri modelimize bazı doğrulama kuralları ekleyelim:

<?php
// api/src/Entity/Book.php

namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

// ...
class Book
{
/**
* ...
* @Assert\Isbn
*/
public $isbn;

/**
* ...
* @Assert\NotBlank
*/
public $title;

/**
* ...
* @Assert\NotBlank
*/
public $description;

/**
* ...
* @Assert\NotBlank
*/
public $author;

/**
* ...
* @Assert\NotNull
*/
public $publicationDate;

// ...
}
<?php
// api/src/Entity/Review.php

namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

// ...
class Review
{
/**
* ...
* @Assert\Range(min=0, max=5)
*/
public $rating;

/**
* ...
* @Assert\NotBlank
*/
public $body;

/**
* ...
* @Assert\NotBlank
*/
public $author;

/**
* ...
* @Assert\NotNull
*/
public $publicationDate;

/**
* ...
* @Assert\NotNull
*/
public $book;

// ...
}

Entityleri bu @Assert\* ek açıklamalarını ekleyerek güncelledikten sonra (Doctrine’de olduğu gibi XML veya YAML de kullanabilirsiniz), önceki POST isteğini tekrar deneyin.

{
"@context": "/contexts/ConstraintViolationList",
"@type": "ConstraintViolationList",
"hydra:title": "An error occurred",
"hydra:description": "isbn: This value is neither a valid ISBN-10 nor a valid ISBN-13.\ntitle: This value should not be blank.",
"violations": [
{
"propertyPath": "isbn",
"message": "This value is neither a valid ISBN-10 nor a valid ISBN-13."
},
{
"propertyPath": "title",
"message": "This value should not be blank."
}
]
}

Artık her zaman Hydra hata biçimi kullanılarak serialize edilmiş uygun doğrulama hata mesajları alıyorsunuz (RFC 7807 de desteklenmektedir). Bu hataların client tarafında ayrıştırılması kolaydır. Uygun doğrulama kısıtlamalarını ekleyerek, sağlanan ISBN’nin geçerli olmadığını da fark ettik …

GraphQL Desteği Ekleme

API Platformu bir REST ve GraphQL framework değil mi? Bu doğru! GraphQL desteği varsayılan olarak etkin değildir. Eklemek için graphql-php kitaplığını kurmamız gerekiyor. Aşağıdaki komutu çalıştırın (önbelleğin iki kez temizlenmesi gerekir):

$ docker-compose exec php composer req webonyx/graphql-php && docker-compose exec php bin/console cache:clear

Artık bir GraphQL API’ye sahipsiniz! API Platformu ile birlikte gelen güzel GraphiQL kullanıcı arayüzünü kullanarak oynamak için https://localhost:8443/graphql (or https://localhost:8443/api/graphql API Platformunu kurmak için Symfony Flex kullandıysanız) açın:

Bir greeting oluşturarak deneyin:

mutation {
createGreeting(input: {name: "Test2"}) {
greeting {
id
name
}
}
}

Ve greeting okuyarak:

{
greeting(id: "/greetings/1") {
id
name
_id
}
}

GraphQL uygulaması sorguları, mutasyonları, Relay sunucu spesifikasyonunun% 100'ünü, sayfalamayı, filtreleri ve erişim kontrol kurallarını destekler. Popüler RelayJS ve Apollo istemcileriyle kullanabilirsiniz.

The Admin

API’niz tarafından açığa çıkan verileri yönetmek için bir yönetim arka ucuna sahip olmak güzel olmaz mıydı? Bekle … Zaten bir tane var!

Tarayıcınızda https: // localhost: 444'ü açın:

Bu Materyal Tasarım yöneticisi, API Platform Yöneticisi (React Yöneticisi, React ve Redux içeride) ile oluşturulmuş bir Progressive Web Uygulamasıdır. Güçlüdür ve tamamen özelleştirilebilir. Daha fazla bilgi edinmek için belgelerine bakın. API bileşeni tarafından açığa çıkan Hydra belgelerinden kendi kendini inşa etmek için kullanır. % 100 dinamiktir — kod üretilmez.

React Progressive Web Uygulaması

API Platform ayrıca, tamamen çalışan React / Redux ve Vue.js Progressive Web Uygulamalarını kolayca ayarlayıp özelleştirebileceğiniz harika bir istemci oluşturucusuna sahiptir. Jeneratör, mobil cihazların tüm özelliklerinden yararlanmayı tercih ederseniz React Native’i de destekler.

Dağıtım, üretilen kodun React tarzını karşılamaya hazır bir iskeletle birlikte gelir. Uygulamanızı önyüklemek için şunu çalıştırın:

$ docker-compose exec client generate-api-platform-client

Client client/src/index.js dosyasını açın ve konsolda görüntülenen kopyalama / yapıştırma talimatlarını izleyin. Ardından tarayıcınızda https: // localhost / books / sayfasını açın:

Ayrıca — resource bağımsız değişkeniyle belirli bir kaynak için kod oluşturmayı da seçebilirsiniz (örnek: generate-api-platform-client — resource books).

Oluşturulan kod bir liste (sayfalandırma dahil), bir silme düğmesi, bir oluşturma ve bir düzenleme formu içerir. Ayrıca, uygulamayı engelli kişiler tarafından kullanılabilir hale getirmek için Bootstrap 4 işaretlemesi ve ARIA rolleri içerir.

Vue.js üzerine kurulu bir PWA veya yerel bir mobil uygulama oluşturmayı tercih ederseniz, özel belgeleri okuyun.

Kendi İş Mantığınızı Bağlama

Artık temel bilgileri öğrendiğinize göre, API Platformunun nasıl tasarlandığını ve özel iş mantığınızı nasıl bağlayacağınızı anlamak için genel tasarım hususlarını ve API Platformunu nasıl genişleteceğinizi okuduğunuzdan emin olun!

Diğer özellikler

İlk olarak, yerleşik Kubernetes entegrasyonunu kullanarak uygulamanızı bulutta nasıl deploy edeceğinizi öğrenmek isteyebilirsiniz.

O zaman öğrenilecek daha birçok özellik var! Bunları nasıl kullanacağınızı ve API Platformunu ihtiyaçlarınıza uyacak şekilde nasıl genişleteceğinizi keşfetmek için tüm belgeleri okuyun. API Platformu, prototip oluşturma ve Hızlı Uygulama Geliştirme (RAD) için inanılmaz derecede etkilidir, ancak framework çoğunlukla basit CRUD uygulamalarının çok ötesinde karmaşık API odaklı projeler oluşturmak için tasarlanmıştır. Güçlü uzatma noktalarından yararlanır ve performans için sürekli olarak optimize edilir. Çok sayıda yüksek trafikli web sitesine güç sağlar.

API Platform, API Platform uygulamalarının hızlı bir şekilde parlamasını sağlayan yerleşik bir HTTP önbellek geçersiz kılma sistemine sahiptir ve varsayılan olarak Varnish kullanır. API Platformu Çekirdek Kitaplığı: Yerleşik HTTP Önbelleği Geçersiz Kılma Sistemini Etkinleştirme bölümünde daha fazlasını okuyun.

En sevdiğiniz istemci tarafı teknolojinizi kullanabileceğinizi unutmayın: API Platformu, React ve Vue.js bileşenleri sağlar, ancak Angular, Ionic ve Swift dahil olmak üzere tercih ettiğiniz client tarafı teknolojisini kullanabilirsiniz. HTTP isteklerini gönderebilen herhangi bir dil uygundur (COBOL bile bunu yapabilir).

Daha da ileri gitmek için API Platform ekibi, serialize etme grupları, kullanıcı yönetimi veya JWT ve OAuth kimlik doğrulamasından yararlanma gibi daha gelişmiş kullanım durumlarını gösteren bir demo uygulaması tutar. Demo kod kaynağını GitHub’da kontrol edin ve çevrimiçi olarak göz atın.

API Platformunun nasıl kullanılacağını öğrenmenin en kolay ve eğlenceli yolu, SymfonyCasts’te bulunan 60'tan fazla screencasts video kaydını izlemektir!

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store