当前位置: 首页 > 知识库问答 >
问题:

如何用不基于实体api平台的资源创建API?

萧阳波
2023-03-14

我需要创建一个GETendpoint来返回通过超文本传输协议客户端从另一个应用程序获取的资源,而不是基于实体。我获取的资源是一个数组:

[
    "id" => 1234
    "first_name" => ""
    "last_name" => ""
    "email" => ""
    "country" => 1
    "country_code" => 93
    "phone_number" => "3434343"
    "nationality" => "AF"
    "professional_industry" => "Health Care"
    "job_title" => "Medical Doctor - General Practitioner"
    "specialisation" => "No specialisation"
    "career_length_month" => 1
    "career_length_year" => 1
  ]

然后我需要查询数据库以获取一些数据以添加到资源数组中。

所以我在src/控制器/MyController.php中创建了它:

    /**
     * @Route("/api/v1/get-profile", name="get_profile")
     * @return JsonResponse
     */
    public function getMemberInfo(): JsonResponse
    {
        // step 1 : use http client to request data from another application
        // step 2 : query DB to fetch some data and add to data array
        return new JsonResponse($data, Response::HTTP_OK);
    }

但是现在,我希望我的api返回json api响应格式:https://jsonapi.org/.

基于实体的资源,api平台完全支持。我不需要做太多。我只是在实体类中添加“key”#[Api资源]并配置一些东西。然后我有一个json api格式的api,很容易:

{
    "data": {
        "id": "",
        "type": "",
        "attributes": {}
    }
}

但是如果资源不是基于实体的呢?是否有任何api平台的内置功能我可以使用,或者我必须自己做一个转换器?

共有2个答案

林冥夜
2023-03-14

最好是可以创建自定义数据提供程序。此自定义数据提供程序将负责从外部源提取数据。然后,API平台将能够像常规实体一样使用它。

  • 文档
  • API 平台演示中的完整示例
蒋航
2023-03-14

您需要重写OpenAPI规范如何在留档中描述:https://api-platform.com/docs/core/openapi/#overriding-the-openapi-specification

然后,在新的类中,您必须添加您需要的模式定义,添加新的PathItem实例,每个PathItem需要新的操作实例,等等。

很抱歉没有粘贴示例,它需要这么多代码。我在一个项目中以这种方式工作,但目前还不公开。

我希望我能阻止你。

 类似资料:
  • 根据文档,默认情况下,api平台将加载相关资源。 但是在默认配置中,我对具有关系的资源的所有查询(主要是典型的关系)都用对象IRI而不是序列化对象填充这些属性。 例如,对于该实体: 然后我们就有了相应的: 我已经在关系上设置了,即使理论上不需要。我的配置是默认的,但是以防万一我真的在我的中写了这个: 的结果确认应用了正确的配置: 然而结果会是这样的: “boostLead”、“channel”和“

  • 启动程序(启动TomCat)后,模式中没有创建表,但是必须自动创建表“player”。 我检查了Hibernate配置,但找不到问题所在。我尝试将hbm2ddl.auto更改为hibernate.hbm2ddl.auto(也包括创建、创建-删除等),但没有帮助。 如果有什么想法,请告诉我。谢了。 实体类: 存储库类: Hibernate配置: pom.xml的完整项目代码可通过链接:https:/

  • 问题内容: 使用Jhipster和Postgresql,我创建了一个实体“ Customer”。当我使用Angular UI将数据添加到该实体或将其添加到API时,可以使用UI上的搜索表单来搜索此数据。 但是,当我直接在数据库中插入数据时,即使在应用程序重新启动后也无法搜索数据。搜索仍然(仅)对通过UI添加的数据有效。 我是Elasticsearch的新手,不知道在后端插入数据并将其提供给Elas

  • 我有一个包含 Serie 对象的集合的 Chart 对象,这些 Serie 对象包含数据对象的集合。我希望根据它们在各自集合中的位置来标识 REST API 来识别 Serie 和 Data 对象,而不是要求 REST API 通过代理主键来识别 Serie 和 Data 对象。 数据库模式如下。最初我考虑使serie的和data的复合主键,但是,Doctrine只能对一个级别(即Serie)这样

  • 我们是一个电子商务网站,希望创建API给我们的客户提供一个接口,通过这个API发送产品相关信息。我们目前需要3种类型的产品信息: 基本细节:如价格、颜色等 映像:产品映像 评论:该产品的评论 方法1:允许客户端通过单个API发送所有信息。 方法2:为所有子资源创建不同的API。 方法3:使用层次URI为所有子资源创建不同的API。

  • 我对平台API有问题(https://api-platform.com/)当我有一个从另一个实体继承的实体时。例如,从User实体继承的Worker实体。当我转到Platform API文档时,所有Worker属性都显示在User类中 这是一个比解释更好的模式。这是我的两个实体和问题文档的结果 这就是问题所在。我们看到 Worker 子类的属性出现在 User 类的模型中。并且当我测试发送 POS