Eine API mit API平台bereitstellen
Eine API mit API平台bereitstellen
我们的实现方式Gästebuch-Website。Wie wäre es, wenn Du jetzt eine API veröffentlichen würdest, um eine bessere Nutzung der Daten zu ermöglichen?Eine API könnte von einer mobilen Anwendung verwendet werden,嗯,alle Konferenzen und deren kommenta anzuzeigen and die Teilnehmer* inen eventuell kommenta abgeben zu lassen。
在diesem Schritt werden wir eine schreibgeschützte API实施者。
API平台安装
Eine API durch Schreiben von Code anzulegen ist möglich, aber wenn wir standard verwenden wollen, sollten wir besesser Eine Lösung verwenden, die sich bereits um einen Großteil der Aufgaben kümmert。Eine Lösung wie API平台:
1
$ob娱乐下载Symfony作曲家请求API
Eine API für Konferenzen bereitstellen
Ein paar属性在der Konferenzklasse reichen aus, um die API zu konfigurieren:
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()
Das Haupt-AttributeApiResource
konfiguriert die API für Konferenzen。Sie beschränkt die möglichen Operationen auf得到
und konfiguriert verschiedene Dinge: z. B. welche Felder angezeigt werden and wie die Konferenzen sortiert werden sollen。
Der haupteinstegspunkt für die API ist standardmässig/ api
。这是如此潮湿的配置配置/线路/ api_platform.yaml
, die durch das Recipe des Pakets hinzugefügt wurde。
Ein Web-Interface ermöglicht die Interaktion mit API:
Benutze es,嗯die verschienen Möglichkeiten zu testen:
钢铁之路,我们的世界würde,所有人都死在世界上!
Eine API für Kommentare bereitstellen
Mach das Gleiche für Kommentare:
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'])]
死亡,欢乐,艺术,von Attributen werden verwendet,嗯死亡,klase zu konfiguriren。
Einschränkung der Kommentare, die über die API zugänglich信德
Standardmäßig stellt die API平台allle Einträge aus der Datenbank zur Verfügung。阿贝尔für Kommentare sollten nur die veröffentlichten Teil der API sein。
Wenn Du die von der API zurückgegebenen element einschränken must, erstelle einen Service, derQueryCollectionExtensionInterface
implementiert, um die Doctrine-Abfragen für collection zu steern, und/ order einen Service, derQueryItemExtensionInterface
implementiert für die Steuerung von einzelnen项目(元素):
Die Query-Extension-Klasse wendet ihre Logik nuf Die评论
资源und ändert den Doctrine Query Builder so, dass er nur Kommentare im发表
-Zustand berucksichtigt。
歌珥konfigurieren
Standardmäßig ist der Aufruf der API von einer anderen Domain aufgrund der同源Sicherheitsrichtlinie moderner HTTP-Clients禁止。Das CORS-Bundle, Das als Teil vonComposer req API
installiert wurde, senddet cross - origin - resource - share - header baserend auf der Environment-VariableCORS_ALLOW_ORIGIN
。
Standardmäßig erlaubt sind HTTP-Anfragen von本地主机
和127.0.0.1
乌夫jedem港(在.env
definiert)。Das ist genau Das,是wir für den nächsten Schritt benötigen, denn wir werden eine SPA(单页Web应用程序)erstellen, welche über einen eigenen Webserver verfügt, der die API aufruft。
Weiterfuhrendes
- ob娱乐下载SymfonyCasts API平台教程;
- 嗯die GraphQL-Unterstützung zu aktivieren, führe
作曲家需要webonyx/graphql-php
Aus, navigiere dann zu/ api / graphql
。