暴露一个API, API的平台
暴露一个API, API的平台
我们已经完成了网站留言板的实现。允许更多的使用数据,暴露一个API现在怎么样?一个API可以使用一个移动应用程序来显示所有会议,他们的评论,也许让与会者提交评论。
在这一步中,我们将实现一个只读的API。
安装API平台
揭露一个API通过编写一些代码是可能的,但是如果我们想使用标准,我们最好使用一个解决方案,已经负责的重担。API这样的解决方案平台:
1
美元ob娱乐下载symfony作曲家请求api
公开会议的API
一些属性在类会议上我们需要配置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
- - - / src /实体/ Conference.php+ + + b / src /实体/ Conference.php@@ 2 35 + 2 48 @@名称空间的应用程序\实体;+使用ApiPlatform \ \注释\ ApiResource核心;使用App \ Repository \ ConferenceRepository;使用原则\常见\ \ ArrayCollection集合;使用原则\常见\集合\集合;使用原则\ ORM \ ORM映射;使用Syob娱乐下载mfony \桥\学说\验证器\ \ UniqueEntity约束;+使用Syob娱乐下载mfony \序列化器\注释\ \组件组;使用Syob娱乐下载mfony轰\组件\字符串\ \ SluggerInterface;# (ORM \实体(repositoryClass: ConferenceRepository::类)]#【UniqueEntity(“鼻涕虫”)]+ #【ApiResource (+ collectionOperations:[‘得到’= > [' normalization_context ' = >[‘组织’= > '会议:列表']]],+ itemOperations:[‘得到’= > [' normalization_context ' = >[‘组织’= > '会议:条目']]],+顺序:['年' = > ' DESC ', '城市' = > ' ASC '],+ paginationEnabled:假的,+))类会议{# (ORM \ Id) # (ORM \ GeneratedValue) # [ORM \列(类型:“整数”)]+ #【组([会议:列表,'会议:条目']))私人$ id;# (ORM \列(类型:字符串,长度:255)]+ #【组([会议:列表,'会议:条目']))私人美元城市;# (ORM \列(类型:字符串,长度:4)]+ #【组([会议:列表,'会议:条目']))私人美元;# (ORM \列(类型:“布尔”))+ #【组([会议:列表,'会议:条目']))私人国际美元;# (ORM \ OneToMany (mappedBy:“会议”,targetEntity:备注::类,orphanRemoval: true)]美元私人评论;# (ORM \列(类型:字符串,长度:255年,独特:true))+ #【组([会议:列表,'会议:条目']))私人美元弹头;公共函数__construct ()
主要的ApiResource
属性配置API会议。它限制了可能的操作得到
和配置各种东西:比如哪些字段来显示和如何订单会议。
默认情况下,该API的主要入口点/ api
由于配置的配置/线路/ api_platform.yaml
添加的包的配方。
一个web接口允许您与API交互:
用它来测试各种可能性:
想象的时间来实现这一切从头开始!
揭露一个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 56 57 58 59 60 61
- - - / src /实体/ Comment.php+ + + b / src /实体/ Comment.php@@ 2,40 + 2,58 @@名称空间的应用程序\实体;+使用ApiPlatform \ \注释\ ApiFilter核心;+使用ApiPlatform \ \注释\ ApiResource核心;+使用ApiPlatform \ \桥\学说核心\ Orm SearchFilter \滤波器\;使用App \ Repository \ CommentRepository;使用原则\ ORM \ ORM映射;+使用Syob娱乐下载mfony \序列化器\注释\ \组件组;使用Syob娱乐下载mfony \组件\验证器\约束断言;# (ORM \实体(repositoryClass: CommentRepository::类)]# (ORM \ HasLifecycleCallbacks)+ #【ApiResource (+ collectionOperations:[‘得到’= > [' normalization_context ' = >[“团体”= >“备注:列表”]]],+ itemOperations:[‘得到’= > [' normalization_context ' = >[‘组织’= > '评论:条目']]],+顺序:[' createdAt ' = > ' DESC '],+ paginationEnabled:假的,+))+ # [ApiFilter (SearchFilter::类,属性:[会议' = > '完全']))类评论{# (ORM \ Id) # (ORM \ GeneratedValue) # [ORM \列(类型:“整数”)]+ #【组([备注:列表,'评论:条目']))私人$ id;# (ORM \列(类型:字符串,长度:255)]#(断言\ NotBlank)+ #【组([备注:列表,'评论:条目']))私人美元作者;# (ORM \列(类型:“文本”)]#(断言\ NotBlank)+ #【组([备注:列表,'评论:条目']))私人美元文本;# (ORM \列(类型:字符串,长度:255)]#【维护\ NotBlank】#[维护邮件\]+ #【组([备注:列表,'评论:条目']))美元的私人电子邮件;# (ORM \列(类型:datetime_immutable)]+ #【组([备注:列表,'评论:条目']))私人createdAt美元;# [ORM \ ManyToOne (targetEntity:会议::类,inversedBy:“评论”)]# (ORM \ JoinColumn(可以为空:false))+ #【组([备注:列表,'评论:条目']))美元的私人会议;# (ORM \列(类型:字符串,长度:255年,可以为空:true))+ #【组([备注:列表,'评论:条目']))私人photoFilename美元;# (ORM \列(类型:字符串,长度:255年,选择:(“默认”= >“提交”)))
同样的属性是用于配置类。
限制言论公开的API
默认情况下,从数据库API平台公开所有条目。但对于评论,只发表的应该是API的一部分。
当你需要限制API返回的项目,创建一个服务实现QueryCollectionExtensionInterface
控制理论用于收集和/或查询QueryItemExtensionInterface
控制项目:
查询扩展类的逻辑只适用评论
资源和修改原则query builder中只考虑评论发表
状态。
配置歌珥
默认情况下,现代HTTP客户端做的同源安全策略禁止调用API从另一个域。歌珥包,安装的一部分作曲家请求api
,发送跨源资源共享头的基础上CORS_ALLOW_ORIGIN
环境变量。
默认情况下,它的值,中定义.env
,允许HTTP请求本地主机
和127.0.0.1
在任何港口。这正是我们需要下一步我们将创建一个水疗中心,拥有自己的web服务器,调用API。
要进一步
- ob娱乐下载SymfonyCasts平台API教程;
- 要启用GraphQL支持,运行
作曲家需要webonyx / graphql-php
,然后浏览到/ api / graphql
。
这项工作,包括代码示例,许可下Creative Commons BY-NC-SA 4.0许可证。