symfony使用api platform快速搭建API服务(1) langziyang Symfony博客 390 views 现代程序有很多抛弃了网页,转而使用小程序或者APP,所以需要开发者写API接口。同时需要写后台对实体进行CRUD管理,如果后台也使用React、Vue等来写,那么整个服务只需要写一套API就可以满足所有要求了。 接下来我们就使用symfony和api platform进行快速统一的API开发。 创建项目 ```shell mkdir "book" cd book symfony new --webapp . ``` 安装api platform ```shell composer req api ``` 然后我们访问 http://localhost/api 就可以看到接口了,当然,现在什么接口都还没有 我们先修改.env中的数据库连接: ```dotenv DATABASE_URL="postgresql://postgres:123456789@postgresql:5432/book?serverVersion=15&charset=utf8" ``` 用命令生成数据库 ```shell php bin/console doctrine:database:create ``` 再生成一个entity ```shell php bin/console make:entity Class name of the entity to create or update (e.g. OrangeElephant): > Category Mark this class as an API Platform resource (expose a CRUD API for it) (yes/no) [no]: > yes created: src/Entity/Category.php created: src/Repository/CategoryRepository.php Entity generated! Now let's add some fields! You can always add more fields later manually or by re-running this command. New property name (press <return> to stop adding fields): > name Field type (enter ? to see all types) [string]: > Field length [255]: > Can this field be null in the database (nullable) (yes/no) [no]: > updated: src/Entity/Category.php Add another property? Enter the property name (or press <return> to stop adding fields): > Success! Next: When you're ready, create a migration with php bin/console make:migration ``` 我们生成了一个分类实体,里面只有一个name属性,用来表示这个分类的名称, Mark this class as an API Platform resource (expose a CRUD API for it) (yes/no)表示是否把这个entity暴露为Api,我们选择是 接下来我们更新数据库(我使用了简写方法) ```shell php bin/console d:s:u -f ``` 重新访问 http://localhost/api 你可以看到多了一个Category的接口列表,默认自动生成了CRUD接口.我们再看一看src/Entity/Category.php ```php use ApiPlatform\Metadata\ApiResource; #[ORM\Entity(repositoryClass: CategoryRepository::class)] #[ApiResource] class Category { } ``` #[ApiResource]就是生成该实体所有接口的属性,你可以使用postman或者其它工具对接口进行操作,也可以直接在接口页面点击Try it out进行操作 我们先post一个名称为"编程语言"的分类 ```shell curl -X 'POST' \ 'http://localhost/api/categories' \ -H 'accept: application/ld+json' \ -H 'Content-Type: application/ld+json' \ -d '{ "name": "编程语言" }' ``` 提交后会返回如下信息: ``` { "@context": "/api/contexts/Category", "@id": "/api/categories/1", "@type": "Category", "id": 1, "name": "编程语言" } ``` api platform默认使用jsonld,所以会在返回中加上@id,@context,@type等信息,其中@id尤其重要,"International Resource Identifier".简称IRI。我们会在后面用到 接下来我们再添加两个分类:儿童漫画、文学小说。下一节我们继续 帮助PHPZlc项目! 与任何开源项目一样, 贡献代码 或 文档 是最常见的帮助方式, 但我们也有广泛的 赞助机会。 4 赞赏 加入技术群 评论 去登录