修改API的操作-Symfony5全面开发

您需要登录后才可观看此视频

为了更好的为您提供服务,请您登录后再查看本课程。

立即登录

我们查看所有操作文章的API,前两个API,它们的URI地址中并不包含id参数,这两个API可以称作是集合操作。后面四个API它们都是针对某一篇文章来进行操作的,这四个API我们可以叫做单项操作API。

回到项目,按着command键点击ApiResource类查看类的源码。在构造方法中,有$collectionOperations和$itemOperations,通过这两个参数的设置,我们就可以修改所有操作文章类的API。回到Post类,我们添加构造方法。回车,默认情况下集合操作只有2个get和post,单项操作有4个。

回到项目,添加$collectionOperations,这里使用数组。默认情况下Api Platform提供了两个操作get、post,然后我们来修改单项操作$itemOperations。默认情况Api Platform自动的为我们添加了get,put,delete和patch4个操作。

如果我们删除数组中的某一项,那么对应的接口将会被删除。回到浏览器刷新,现在我们看到delete操作的API已经被删除了。回到项目,如果你想删除所有的单项操作,你可以把数组留空。回到浏览器再次刷新,我们看到关于文章的单项操作API,已经全部被删除了。

但是这样的话会出现问题,我们在页面上使用一下第一个接口,点击Try it out,点击Execute。这里出错了。没有item route,就是说没有单项操作的路由。

我们当前接收的响应格式是jsonld格式,jsonld格式的数据中会自动为每项资源添加@id,就是国际化资源标识符。但是我们并没有生成国际化资源标识符的路由,这样就会出错了。

回到项目我们需要添加get操作,回到浏览器再次执行第一个接口,这里仍然出错了,但是并不是刚才的错误。这里仍然是个循环引用的错误,在后面的课程我们会解决这个错误。

刷新文档页面,现在我们文章内的操作有三项,在某些情况下,你可能真的需要删除第三个接口。我们需要使用另外一个方法,我们查看Api Platform文档,我们查看API组件的文档。我们查看API组件的文档,在文档中有个Operations操作的文档,点击这里往下看,这里有一段说明。如果你真的不允许访问单个资源,我们可以让这个请求返回一个404错误,这样仍然可以生成资源的IRI,但是并不能访问资源的数据。

我们来复制这段注解,回到项目,换行粘贴,引用一下NotFoundAction。回到浏览器刷新,现在文档中仍然有这个接口,但是现在这个接口将会返回404错误。我们来使用一下,点击Try it out,这里输入21点击Execute,我们看到现在返回了一个404错误。

#src/Entity/Post.php

/**
 * @ORM\Entity(repositoryClass=PostRepository::class)
 * @ORM\HasLifecycleCallbacks
 */
#[ApiResource(
    collectionOperations: ['get', 'post'],
    itemOperations: [
        'get' => [
            'controller' => NotFoundAction::class,
            'read' => false,
            'output' => false,
        ],
    ]
)]
class Post
{
    // ...
}

我们访问不到任何数据,往上看,我们再次使用第一个接口,Try it out,Execute,当前的错误仍然是循环引用的错误。

回到项目,我们可以通过对这两项参数的配置来添加或者删除API,当我们在使用接口获取数据或者使用接口生成数据时,会进行数据的序列化与反序列化。在下节课,我们来学习序列化与反序列化的设置。

课程讨论

当前内容评论功能已关闭。