Udostępnianie API咱pomocąbiblioteki API平台
Udostępnianie API咱pomocąbiblioteki API平台
Zakończyliśmy implementacjęstrony internetowej księgi gości。偿lepiej wykorzystaćnasze戴恩,może udostępnimy teraz API ?API może byćużywane przez aplikacjęmobilną做wyświetlania wszystkich konferencji,我komentarzy, może nawet umożliwićuczestnikom dodawanie nowych komentarzy。
W tym kroku zamierzamy wdrożyćAPI tylko odczytu。
Instalowanie API平台
Udostępnianie API poprzez napisanie kodu samemu jest możliwe,啤酒jeśli zależy南na zgodności泽standardami, lepiej użyćrozwiązania, ktore wykona咱nas tęciężkąpracę。Rozwiązanie takie木菠萝API平台:
1
美元ob娱乐下载symfony作曲家请求api
Udostępnianie API国防后勤局konferencji
Kilka atrybutow w klasie会议wszystko, czego potrzebujemy,赎skonfigurowaćAPI:
1 2 3 4 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集合;使用原则\常见\集合\集合;使用原则\ ORM \ ORM映射;使用Syob娱乐下载mfony \桥\学说\验证器\ \ UniqueEntity约束;+使用Syob娱乐下载mfony \序列化器\注释\ \组件组;使用Syob娱乐下载mfony轰\组件\字符串\ \ SluggerInterface;# (ORM \实体(repositoryClass: ConferenceRepository::类)]#【UniqueEntity(“鼻涕虫”)]+ #【ApiResource (+操作:[+新得到(normalizationContext:(“团体”= > '会议:条目']),+新GetCollection (normalizationContext:(“团体”= > '会议:列表'])+),+顺序:['年' = > ' DESC ', '城市' = > ' ASC '],+ paginationEnabled:假的,+))类会议{# (ORM \ Id) # (ORM \ GeneratedValue) # (ORM \列)+ #【组([会议:列表,'会议:条目']))美元私人? int id =零;# [ORM列(长度:255)\]+ #【组([会议:列表,'会议:条目']))私人?字符串$城市=零;# [ORM列(长度:4)\]+ #【组([会议:列表,'会议:条目']))私人?字符串$年=零;# (ORM \列)+ #【组([会议:列表,'会议:条目']))私人? bool国际美元=零;# (ORM \ OneToMany (mappedBy:“会议”,targetEntity:备注::类,orphanRemoval: true)]美元私人收藏评论;# (ORM \列(类型:字符串,长度:255年,独特:true))+ #【组([会议:列表,'会议:条目']))私人?字符串$蛞蝓=零;公共函数__construct ()
Głowny atrybutApiResource
国防后勤局konferencji konfiguruje API。Ogranicza możliwe operacje做得到
我,ustawia sposob sortowania listy konferencji wskazuje,里面普拉wyświetlać。
Domyślnie, głownym punktem wejścia国防后勤局API笑话/ api
dzięki konfiguracji w配置/线路/ api_platform.yaml
ktora została dodana przez przepis (ang。pakietu配方)。
Interfejs webowy pozwala na interakcjęz API:
Użyj去赎przetestowaćrożne możliwości:
Wyobraźsobie, ile czasu zajęłoby wdrożenie迪高wszystkiego od zera !
Udostępnienie API国防后勤局komentarzy
Zrob萨摩w przypadku komentarzy:
1 2 3 4 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 56 57 58 59 60 61 62 63 64 65 66
- - - / src /实体/ Comment.php+ + + b / src /实体/ Comment.php63 @@ @@ 2 41 + 2名称空间的应用程序\实体;+使用ApiPlatform \学说\ Orm SearchFilter \滤波器\;+使用ApiPlatform \ \ ApiFilter元数据;+使用ApiPlatform \ \ ApiResource元数据;+使用ApiPlatform \ \元数据获取;+使用ApiPlatform \ \ GetCollection元数据;使用App \ Repository \ CommentRepository;使用原则\ DBAL \类型\类型;使用原则\ ORM \ ORM映射;+使用Syob娱乐下载mfony \序列化器\注释\ \组件组;使用Syob娱乐下载mfony \组件\验证器\约束断言;# (ORM \实体(repositoryClass: CommentRepository::类)]# (ORM \ HasLifecycleCallbacks)+ #【ApiResource (+操作:[+新得到(normalizationContext:(“团体”= > '评论:条目']),+新GetCollection (normalizationContext:(“团体”= >“备注:列表”))+),+顺序:[' createdAt ' = > ' DESC '],+ paginationEnabled:假的,+))+ # [ApiFilter (SearchFilter::类,属性:[会议' = > '完全']))类评论{# (ORM \ Id) # (ORM \ GeneratedValue) # (ORM \列)+ #【组([备注:列表,'评论:条目']))美元私人? int id =零;# [ORM列(长度:255)\]#(断言\ NotBlank)+ #【组([备注:列表,'评论:条目']))私人?字符串$ author =零;# (ORM \列(类型:类型:文本)]#(断言\ NotBlank)+ #【组([备注:列表,'评论:条目']))私人?字符串文本美元=零;# [ORM列(长度:255)\]#【维护\ NotBlank】#[维护邮件\]+ #【组([备注:列表,'评论:条目']))私人?字符串$邮件=零;# (ORM \列)+ #【组([备注:列表,'评论:条目']))私人? \ DateTimeImmutable createdAt美元=零;# (ORM \ ManyToOne (inversedBy:“评论”)]# (ORM \ JoinColumn(可以为空:false))+ #【组([备注:列表,'评论:条目']))私人?会议会议美元=零;# (ORM \列(长度:255年,可以为空:真)]+ #【组([备注:列表,'评论:条目']))私人?字符串$ photoFilename =零;# (ORM \列(长度:255年,选择:(“违约”= >“提交”)))
十个山姆rodzaj atrybutow jest używany做konfiguracji klasy。
Ograniczanie komentarzy udostępnionych przez API
Domyślnie API平台udostępnia wszystkie wpisy z bazy danych。啤酒w przypadku komentarzy、API powinno zwracaćtylko te opublikowane。
Gdy musisz ograniczyćliczbęelementow zwracanych przez API, utworz usługę(ang。服务),ktora przejmie kontrolęnad zapytaniem używanym przez学说国防后勤局kolekcji jeśli zaimplementujeszQueryCollectionExtensionInterface
我/滑poszczegolnych elementow, jeśli zaimplementujeszQueryItemExtensionInterface
。
Klasa rozszerzeńzapytaństosuje swoj schemat działania tylko w odniesieniu zasobow评论
我modyfikuje konstruktor zapytań学说(ang。教义query builder),赎uwzględnićtylko komentarze oznaczone jako发表
。
Konfigurowanie歌珥
Domyślnie reguła迪高samego pochodzenia (ang。同源安全策略)nowoczesnych klientow HTTP sprawiaże wywoływanie API z innej domeny jest zabronione。Pakiet歌珥,zainstalowany jako część作曲家请求api
,wysyła nagłowki跨源资源共享oparte na zmiennejśrodowiskowejCORS_ALLOW_ORIGIN
。
Domyślnie, jego wartośćzdefiniowana w.env
pozwala na odbieranieżądańHTTP z本地主机
我127.0.0.1
na dowolnym porcie。jest dokładnie, czego potrzebujemy w kolejnym kroku, ponieważstworzymy aplikacjęjednostronicową(ang。单页面应用程序,SPA) mającąswoj własny serwer WWW, ktora będzie odwoływaćsięAPI。
Idąc dalej
- Samouczek ob娱乐下载SymfonyCasts dotyczący API平台;
- 偿włączyćobsługęGraphQL uruchom
作曲家需要webonyx / graphql-php
,następnie przejdź做/ api / graphql
。