API平台を使ってAPIを公開する
API平台を使ってAPIを公開する
ゲストブックのWebサ电子邮箱ト実装が完了しました。より多くデ,タを利用してもらうために,apiを公開するのはどうでしょうか?APIをモバイルアプリケーションで利用して,カンファレンスやコメントを表示したり,参加者がコメントを残すことができるようにすることが可能です。
このステップでは,読み取り専用のapiを実装します。
API平台をaapl
いくつかのコードを実装することでAPIを公開することはできますが,スタンダードなやり方を求める場合は,API平台のようなすでに面倒な実装を行っているソリューションを使用した方が良いでしょう。
1
$ob娱乐下载Symfony作曲家请求API
カンファレンス用のapiを公開する
会议クラスにいくつかのアトリビュートを設定するだけで,APIの設定を行うことができます。
12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
——/ src /实体/ Conference.php+ + + b / src /实体/ Conference.php@@ -2,35 +2,52 @@名称空间的应用程序\实体;+使用ApiPlatform \ \ ApiResource元数据;+使用ApiPlatform \ \元数据获取;+使用ApiPlatform \ \ GetCollection元数据;使用App \ Repository \ ConferenceRepository;使用原则\常见\ \ ArrayCollection集合;使用原则\常见\集合\集合;使用Doctrine\ORM\Mapping作为ORM;使用Syob娱乐下载mfony \桥\学说\验证器\ \ UniqueEntity约束;+使用Syob娱乐下载mfony \序列化器\注释\ \组件组;使用Syob娱乐下载mfony轰\组件\字符串\ \ SluggerInterface;#[ORM\Entity(repositoryClass: ConferenceRepository::class)] #[UniqueEntity('slug')]+ #【ApiResource (+操作:[+ new Get(normalizationContext: ['groups' => 'conference:item']),+ new GetCollection(normalizationContext: ['groups' => 'conference:list'])+),+ order: ['year' => 'DESC', 'city' => 'ASC'],+ paginationEnabled: false,+))类会议{#[ORM\Id] #[ORM\GeneratedValue] #[ORM\列]+ #[分组(['会议:列表','会议:项目'])]int $id = null;# [ORM列(长度:255)\]+ #[分组(['会议:列表','会议:项目'])]$city = null;# [ORM列(长度:4)\]+ #[分组(['会议:列表','会议:项目'])]字符串$year = null;# (ORM \列)+ #[分组(['会议:列表','会议:项目'])]bool $isInternational = null;#[ORM\OneToMany(mappedBy: 'conference', targetEntity: Comment::class, orphanRemoval: true)] private Collection $comments;#[ORM\列(类型:'string',长度:255,唯一:true)]+ #[分组(['会议:列表','会议:项目'])]字符串$slug = null;公共函数__construct()
メereplicationンのApiResource
アトリビュ,トは,カンファレンス用のapiを構成します。可能な操作を得到
に制限して,表示するフィ,ルドや表示順など様々な設定をしています。
デフォルトでは,apiのメaapl .ンエントリ.ポaapl .ントは/ api
です。これは,API平台のパッケ,ジによって追加された配置/线路/ api_platform.yaml
によって構成されています。
Web端:ンタ,フェ,スを使用することで,API:と対話することができます。
これを使用して様々な可能性を検証します。
ここまでの全てをゼロから実装するためにかかる時間を想像してください!
コメントapiの公開
コメントにも同様の設定を行います。
12 34 56 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
——/ src /实体/ Comment.php+ + + b / src /实体/ Comment.php@@ -2,41 +2,63 @@名称空间的应用程序\实体;+使用ApiPlatform \学说\ Orm SearchFilter \滤波器\;+使用ApiPlatform \ \ ApiFilter元数据;+使用ApiPlatform \ \ ApiResource元数据;+使用ApiPlatform \ \元数据获取;+使用ApiPlatform \ \ GetCollection元数据;使用App \ Repository \ CommentRepository;使用原则\ DBAL \类型\类型;使用Doctrine\ORM\Mapping作为ORM;+使用Syob娱乐下载mfony \序列化器\注释\ \组件组;使用Syob娱乐下载mfony\Component\Validator\Constraints作为Assert;#[ORM\Entity(repositoryClass: CommentRepository::class)] #[ORM\HasLifecycleCallbacks]+ #【ApiResource (+操作:[+ new Get(normalizationContext: ['groups' => 'comment:item']),+ new GetCollection(normalizationContext: ['groups' => 'comment:list'])+),+ order: ['createdAt' => 'DESC'],+ paginationEnabled: false,+))+#[ApiFilter(SearchFilter::class, properties: ['conference' => 'exact'])]类注释{#[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column]+ #[Groups(['comment:list', 'comment:item'])]int $id = null;#[ORM\列(长度:255)]#[Assert\NotBlank]+ #[Groups(['comment:list', 'comment:item'])]字符串$author = null;#[ORM\Column(type: Types::TEXT)] #[Assert\NotBlank]+ #[Groups(['comment:list', 'comment:item'])]字符串$text = null;#[ORM\列(长度:255)]#[Assert\NotBlank] #[Assert\Email]+ #[Groups(['comment:list', 'comment:item'])]字符串$email = null;# (ORM \列)+ #[Groups(['comment:list', 'comment:item'])]\DateTimeImmutable $createdAt = null;#[ORM\ManyToOne(inversedBy: 'comments')] #[ORM\JoinColumn(nullable: false)]+ #[Groups(['comment:list', 'comment:item'])]会议$ Conference = null;#[ORM\列(长度:255,nullable: true)]+ #[Groups(['comment:list', 'comment:item'])]$photoFilename = null;#[ORM\列(长度:255,选项:['default' => 'submitted'])]
カンファレンスクラスで設定したのと同じ種類のアトリビュ,トをクラスに設定します。
apiによって公開されるコメントを制限する
デフォルトでは,API平台はデ,タベ,スから全てのデ,タを出力します。ただし,コメントにいては,公開が許可されたもののみが出力される必要があります。
APIによって返されるアイテムを制限する必要がある場合,コレクションの教义クエリーを制御するQueryCollectionExtensionInterface
や,アQueryItemExtensionInterface
を実装したサ,ビスを作成します。
このクエリ拡張クラスは评论
のリソ,スに対してのみロジックを適用し,教义クエリ,ビルダ,を変更して,发表
状態のコメントのみ扱うようにします。
Corsを設定する
デフォルトでは,最新HTTPクライアントの同一生成元ポリシーにより,別ドメインからのAPI呼び出しは禁止されています。Composer req API
によりンストルされるcorsバンドルは,環境変数CORS_ALLOW_ORIGIN
をもとに,オリジン間リソ,ス共有ヘッダ,を送信します。
デフォルトでは,.env
で定義されている本地主机
と127.0.0.1
の任意ポトからのhttpリクエストが許可されています。APIを呼び出す独自のWebサバを作成するためには,次のステップが必要です。
より深く学ぶために
- ob娱乐下载SymfonyCasts API平台チュ,トリアル;
- GraphQLサポ,トを有効にするには,
作曲家需要webonyx/graphql-php
を実行し,/ api / graphql
にアクセスします。