Slide 1

Slide 1 text

/ 91 PHP API Platform Web API 2 024 / 12 / 2 2 PHP 2024 @ttskch  1 #track 4 入門 #phpcon

Slide 2

Slide 2 text

/ 91 API Platform 十  2 /

Slide 3

Slide 3 text

/ 91  3 #phpcon 𝕏 🤝✨

Slide 4

Slide 4 text

/ 91 PHP 13 Symfony 12 Kannade  4 @ttskch

Slide 5

Slide 5 text

/ 91 PHP 13 Symfony 12 Kannade  5 @ttskch

Slide 6

Slide 6 text

/ 91  6

Slide 7

Slide 7 text

/ 91 PHP 13 Symfony 12 Kannade  7 @ttskch

Slide 8

Slide 8 text

/ 91 PHP 13 Symfony 12 Kannade 2025 行 長  8 @ttskch

Slide 9

Slide 9 text

ॕʂॳ։࠵ʂ 🎉

Slide 10

Slide 10 text

ॕʂॳ։࠵ʂ 🎉 ・一 大

Slide 11

Slide 11 text

/ 91 PHP API Platform Web API  11 入門

Slide 12

Slide 12 text

/ 91  12 https://api-platform.com/docs/symfony/ API Platform 言 API Fabien Potencier (Symfony )

Slide 13

Slide 13 text

/ 91 自己 2 API Platform 8 3 3 OpenAPI 3 1 5  13 🔖

Slide 14

Slide 14 text

/ 91 一  14 https://github.com/ttskch/phpcon- 2024 -api-platform-demo 日 手 🙏

Slide 15

Slide 15 text

/ 91 自己 2 API Platform 8 3 3 OpenAPI 3 1 5  15 🔖

Slide 16

Slide 16 text

/ 91 Web API PHP 1 行 API API REST GraphQL Symfony API Platform ...  16

Slide 17

Slide 17 text

/ 91 Web API PHP 1 行 API API REST GraphQL Symfony 201 5 / 09 2 024 / 0 8 Symfony Laravel ⾒ 20 24 / 09 API Platform ...  17

Slide 18

Slide 18 text

2 0 24 / 09 / 27 API Platform 4 . 0 🎉

Slide 19

Slide 19 text

/ 91 Web API PHP 1 行 API API REST GraphQL Symfony 201 5 / 09 2 024 / 0 8 Symfony Laravel ⾒ 20 24 / 09 API Platform ...  19

Slide 20

Slide 20 text

/ 91 Web API PHP 1 行 API API REST GraphQL Symfony 201 5 / 09 2 024 / 0 8 Symfony Laravel ⾒ 20 24 / 09 API Platform ...  20

Slide 21

Slide 21 text

/ 91

Slide 22

Slide 22 text

/ 91

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

/ 91  24 😳✨ ✨

Slide 25

Slide 25 text

/ 91 Symfony 用 ⾒ Symfony API Platform Core Laravel 用 ⾒ Laravel API Platform Core 方  25 用 ⾒ https://api-platform.com/docs/core/bootstrap/

Slide 26

Slide 26 text

/ 91 API Platform Core  26 https://github.com/api-platform/api-platform ⭐ 8 . 7 k https://github.com/api-platform/core ⭐ 2 . 5 k https://github.com/api-platform/admin ⭐ 4 87 https://github.com/api-platform/create-client ⭐ 374 https://github.com/api-platform/symfony ⭐ 8 https://github.com/api-platform/laravel ⭐ 49 _ …

Slide 27

Slide 27 text

/ 91 API Platform Core  27 https://github.com/api-platform/api-platform ⭐ 8 . 7 k https://github.com/api-platform/core ⭐ 2 . 5 k https://github.com/api-platform/admin ⭐ 4 87 https://github.com/api-platform/create-client ⭐ 374 https://github.com/api-platform/symfony ⭐ 8 https://github.com/api-platform/laravel ⭐ 49 _ … API Platform Core API Platform

Slide 28

Slide 28 text

/ 91 API Platform Core  28 https://github.com/api-platform/api-platform ⭐ 8 . 7 k https://github.com/api-platform/core ⭐ 2 . 5 k https://github.com/api-platform/admin ⭐ 4 87 https://github.com/api-platform/create-client ⭐ 374 https://github.com/api-platform/symfony ⭐ 8 https://github.com/api-platform/laravel ⭐ 49 _ … API Platform Core Subtree Split API Platform Core

Slide 29

Slide 29 text

/ 91 API Platform Core  29 https://github.com/api-platform/api-platform ⭐ 8 . 7 k https://github.com/api-platform/core ⭐ 2 . 5 k https://github.com/api-platform/admin ⭐ 4 87 https://github.com/api-platform/create-client ⭐ 374 https://github.com/api-platform/symfony ⭐ 8 https://github.com/api-platform/laravel ⭐ 49 _ …

Slide 30

Slide 30 text

/ 91 API Platform Core  30 https://github.com/api-platform/api-platform ⭐ 8 . 7 k https://github.com/api-platform/core ⭐ 2 . 5 k https://github.com/api-platform/admin ⭐ 4 87 https://github.com/api-platform/create-client ⭐ 374 https://github.com/api-platform/symfony ⭐ 8 https://github.com/api-platform/laravel ⭐ 49 _ … Core Symfony Admin Create Client 入

Slide 31

Slide 31 text

/ 91 API Platform Core  31 https://github.com/api-platform/api-platform ⭐ 8 . 7 k https://github.com/api-platform/core ⭐ 2 . 5 k https://github.com/api-platform/admin ⭐ 4 87 https://github.com/api-platform/create-client ⭐ 374 https://github.com/api-platform/symfony ⭐ 8 https://github.com/api-platform/laravel ⭐ 49 _ …

Slide 32

Slide 32 text

/ 91 API Platform Core  32 https://github.com/api-platform/api-platform ⭐ 8 . 7 k https://github.com/api-platform/core ⭐ 2 . 5 k https://github.com/api-platform/admin ⭐ 4 87 https://github.com/api-platform/create-client ⭐ 374 https://github.com/api-platform/symfony ⭐ 8 https://github.com/api-platform/laravel ⭐ 49 _ … Issue 子 🙆

Slide 33

Slide 33 text

is

Slide 34

Slide 34 text

is 色 入

Slide 35

Slide 35 text

/ 91 色 入 身  35 API Platform Core 入 Symfony api-platform/ symfony React Admin 面 api-platform/ admin Next.js 自 生 api-platform/ create-client Mercure 用 - Docker - Kubernetes Helm -

Slide 36

Slide 36 text

/ 91 色 入 身  36 API Platform Core 入 Symfony api-platform/ symfony React Admin 面 api-platform/ admin Next.js 自 生 api-platform/ create-client Mercure 用 - Docker - Kubernetes Helm - 色 入 🫠

Slide 37

Slide 37 text

/ 91 Simple Easy  37 https://x.com/t_wada/status/ 13 771 47 20 307 71 1 18 14

Slide 38

Slide 38 text

/ 91 Simple Easy  38 https://speakerdeck.com/takeru 0 757 /simple-is-not-easy?slide= 5 2

Slide 39

Slide 39 text

/ 91 API Platform Easy  39 入 自 API Platform Core 1 行 API 生 Easy

Slide 40

Slide 40 text

/ 91 API Platform Easy  40 入 自 API Platform Core 1 行 API 生 Easy

Slide 41

Slide 41 text

/ 91  41

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

/ 91 方 用 REST GraphQL 用  43

Slide 44

Slide 44 text

/ 91 API Platform "Easy Simple "  44 Simple 1 小 士 目 Easy 用

Slide 45

Slide 45 text

/ 91 API Platform "Easy Simple "  45 Simple 1 小 士 目 Easy 用 Symfony Kévin Dunglas Symfony

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

Easy

Slide 48

Slide 48 text

Simple

Slide 49

Slide 49 text

日 🙆

Slide 50

Slide 50 text

/ 91 自己 2 API Platform 8 3 3 OpenAPI 3 1 5  50 🔖 10 目

Slide 51

Slide 51 text

/ 91 Laravel  51 $ composer create-project laravel/laravel my-app $ cd my-app

Slide 52

Slide 52 text

/ 91 API Platform Core API Platform Core  52 $ composer require api-platform/laravel $ php artisan api-platform:install

Slide 53

Slide 53 text

/ 91  53 $ php artisan serve

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

/ 91 Article  55 $ php artisan make:model Article $ php artisan make:migration create_articles_table

Slide 56

Slide 56 text

/ 91  56 public function up(): void { Schema::create('articles', function (Blueprint $table) { $table->id(); + $table->string('title'); + $table->text('content')->nullable(); + $table->boolean('published')->default(false); $table->timestamps(); }); }

Slide 57

Slide 57 text

/ 91 行  57 $ php artisan migrate

Slide 58

Slide 58 text

/ 91 API  58

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

/ 91  63 👏👏👏

Slide 64

Slide 64 text

/ 91 自己 2 API Platform 8 3 3 OpenAPI 3 1 5  64 🔖 13 目

Slide 65

Slide 65 text

/ 91 DB CRUD  65 一 一 一 一

Slide 66

Slide 66 text

/ 91 ⾒  66 DB API DB API DB API CQRS etc …

Slide 67

Slide 67 text

/ 91  67 State Provider / State Processor 自

Slide 68

Slide 68 text

/ 91 State Provider / State Processor  68 State Provider State Processor 行

Slide 69

Slide 69 text

/ 91 api-platform/laravel Eloquent 自 自 API State Provider / State Processor  69 State Provider State Processor 行

Slide 70

Slide 70 text

/ 91 namespace App\State; use ApiPlatform\Metadata\Operation; use ApiPlatform\State\ProviderInterface; final class ArticleProvider implements ProviderInterface { public function provide(Operation $operation, array $uriVariables = [], array $context = []): object|array|null { $article = /* ͜͜ʹهࣄΛऔಘ͢ΔॲཧΛॻ͘ */; return $article; } }  70 State Provider 自

Slide 71

Slide 71 text

/ 91 namespace App\State; use ApiPlatform\Metadata\Operation; use ApiPlatform\State\ProcessorInterface; class ArticleProcessor implements ProcessorInterface { public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): mixed { /* ͜͜ʹهࣄΛӬଓԽʢ$data Λߋ৽ͯ͠ $data->save() ͳͲʣ͢ΔॲཧΛॻ͘ */ return $data; } }  71 State Processor 自

Slide 72

Slide 72 text

/ 91 namespace App\Providers; use ApiPlatform\State\ProcessorInterface; use App\State\ArticleProcessor; use App\State\ArticleProvider; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { public function register(): void { $this->app->tag([ArticleProvider::class], ProviderInterface::class); $this->app->tag([ArticleProcessor::class], ProcessorInterface::class); } public function boot(): void { } }  72 Laravel ⾒

Slide 73

Slide 73 text

/ 91 namespace App\Models; use ApiPlatform\Metadata\ApiResource; + use App\State\ArticleProcessor; + use App\State\ArticleProvider; use Illuminate\Database\Eloquent\Model; - #[ApiResource] + #[ApiResource( + provider: ArticleProvider::class, + processor: ArticleProcessor::class, + )] class Article extends Model { // }  73 API

Slide 74

Slide 74 text

/ 91 自己 2 API Platform 8 3 3 OpenAPI 3 1 5  74 🔖 16 目

Slide 75

Slide 75 text

/ 91 OpenAPI  75 Web API 言 OpenAPI OpenAPI JSON YAML OpenAPI Swagger UI API OpenAPI TypeScript 言 API 自 生

Slide 76

Slide 76 text

/ 91 API Platform OpenAPI  76 API Platform OpenAPI 自 生 手 OpenAPI API 自 生 力

Slide 77

Slide 77 text

/ 91  77 API Platform 自 OpenAPI 力 Laravel DB SQLite bool OpenAPI boolean string 🤦

Slide 78

Slide 78 text

/ 91  78

Slide 79

Slide 79 text

/ 91 boolean 力 手  79

Slide 80

Slide 80 text

/ 91 namespace App\Models; + use ApiPlatform\Metadata\ApiProperty; use ApiPlatform\Metadata\ApiResource; use App\State\ArticleProcessor; use App\State\ArticleProvider; use Illuminate\Database\Eloquent\Model; #[ApiResource( provider: ArticleProvider::class, processor: ArticleProcessor::class, )] + #[ApiProperty(schema: ['type' => 'boolean'], property: 'published')] class Article extends Model { // }  80

Slide 81

Slide 81 text

/ 91  81 /

Slide 82

Slide 82 text

/ 91 OpenAPI 生 OpenApiFactory 👌 API Platform OpenApiFactory  82

Slide 83

Slide 83 text

/ 91 自己 2 API Platform 8 3 3 OpenAPI 3 1 5  83 🔖

Slide 84

Slide 84 text

/ 91 Fabien 1 行 API API 3 行  84

Slide 85

Slide 85 text

/ 91 Fabien 1 行 API API 3 行  85

Slide 86

Slide 86 text

/ 91 Fabien 1 行 API API 3 行  86 😉

Slide 87

Slide 87 text

/ 91  87

Slide 88

Slide 88 text

/ 91 Symfony/Laravel API Platform OpenAPI/JSON Schema/JSON-LD/Hydra 自 PhpStorm ✍  88

Slide 89

Slide 89 text

/ 91  89 ・ 🫰 @ttskch Thanks! /

Slide 90

Slide 90 text

/ 91 自己 2 API Platform 8 3 3 OpenAPI 3 1 5  90 🔖

Slide 91

Slide 91 text

/ 91 API 子 OpenAPI JSON 力 TypeScript 自 生 用 子 見  91