Лучшая практика - отправлять только обязательные поля в REST API в Symfony

Нам нужно отправить список сертификатов в другое приложение с помощью REST API. Итак, ответ объекта содержит

[
   {
      "id":1,
      "orderId":123,
      "certificateStatus":true,
      "certificateNo":"xyz123abc",
      "customer":{
         "id":36,
         "email":"[email protected]",
         "firstName":"abc",
         "lastName":"dfg",
         "user":{
            "id":23,
            "username":"[email protected]",
            "enabled":true,
            "kycStatus":false
         },
         "_links":{
            "self":{
               "href":"/app_dev.php/api/v1/customers/36"
            }
         }
      },
      "orderItem":{
         "id":60,
         "quantity":2,
         "unitPrice":177581,
         "total":355162,
         "units":[
            {
               "id":1711,
               "adjustments":[

               ],
               "adjustmentsTotal":0
            },
            {
               "id":1712,
               "adjustments":[

               ],
               "adjustmentsTotal":0
            }
         ],
         "unitsTotal":355162,
         "adjustments":[

         ],
         "adjustmentsTotal":0,
         "variant":{
            "id":334,
            "code":"pool-gold-1oz",
            "optionValues":[

            ],
            "position":0,
            "translations":{
               "en_US":{
                  "locale":"en_US",
                  "id":334
               }
            },
            "version":2,
            "tracked":false,
            "channelPricings":{
               "UK_WEB":{
                  "channelCode":"UK_WEB",
                  "price":177582
               },
               "US_WEB":{
                  "channelCode":"US_WEB",
                  "price":177581
               }
            },
            "_links":{
               "self":{
                  "href":"/app_dev.php/api/v1/products/pool-gold-1oz/variants/pool-gold-1oz"
               }
            }
         },
         "_links":{
            "order":{
               "href":"/app_dev.php/api/v1/orders/29"
            },
            "product":{
               "href":"/app_dev.php/api/v1/products/pool-gold-1oz"
            },
            "variant":{
               "href":"/app_dev.php/api/v1/products/pool-gold-1oz/variants/pool-gold-1oz"
            }
         }
      }
   }
]

Я хочу получить ответ JSON примерно так, как показано ниже. - которым нужны дополнительные настраиваемые поля - код состояния и сообщение - дополнительные поля - удалить ненужные поля

    {
   "code":"custom_code_xxx",
   "message":"Successful",
   "data":[
      {
         "custom_extra_fields1":"asd",
         "custom_extra_fields2":"xyz",
         "id":1,
         "orderId":123,
         "certificateStatus":true,
         "certificateNo":"xyz123abc",
         "customer":{
            "id":36,
            "email":"[email protected]",
            "firstName":"abc",
            "lastName":"dfg",
            "user":{
               "id":23,
               "username":"[email protected]",
               "enabled":true,
               "kycStatus":false
            }
         },
         "orderItem":{
            "id":60,
            "quantity":2,
            "unitPrice":177581,
            "total":355162,
            "unitsTotal":355162
         }
      }
   ]
}

Какие лучшие практики мы можем использовать для упрощения ответа JSON? или нам нужно построить массив в нужном формате

какая-либо причина для -1?

stefun 04.07.2018 11:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
1
989
2

Ответы 2

Когда вы используете что-то вроде, например, Пакет сериализатора JMS вы можете использовать

Виртуальные свойства для дополнительных настраиваемых полей.

И Группы и / или Политика исключения, чтобы избавиться от ненужных полей.

При использовании Сериализатор Symfony у вас есть как минимум опция Группы для исключения некоторых полей.

Чтобы добавить дополнительные поля, я бы либо использовал просто дополнительный Getter в вашем Entity (не чистый подход, но помогает), либо работал с настраиваемыми нормализаторами и / или кодировщиками.

Насколько я понимаю, экспозиция будет применима к полной модели. Но в моем случае мне нужно скрыть некоторые поля в одном API, которые могут потребоваться для отображения в другом API.

stefun 04.07.2018 13:11

@stefun - так ты проверил мой другой вариант: Группы? он доступен для обоих распространенных сериализаторов - какой из них вы используете?

LBA 10.07.2018 17:54

Стефун,

Вы должны создать новый объект передачи данных, содержащий свойства, которые вы хотите использовать в качестве ответа. Затем верните этот объект как json.

Затем вы создаете класс ассемблера, который строит ваш DTO на основе исходного объекта.

Другие вопросы по теме