Ajustes en el contrato de actualización (PUT vs PATCH) del TP2C 2025

Ajustes en el contrato de actualización (PUT vs PATCH) del TP2C 2025

August 24, 2025

Detectamos una inconsistencia en la especificación OpenAPI del enunciado original para actualizar canciones (PUT /songs/{id}). El contrato permitía cuerpos parciales (ninguna propiedad required), lo que contradice la semántica estándar de HTTP: PUT reemplaza la representación completa del recurso y es idempotente; no es safe. (RFC Editor, IETF Datatracker)

📌 ¿Qué cambiamos?

  • Antes: UpdateSongRequest no exigía campos obligatorios, habilitando un “PUT parcial”.

    components:
      schemas:
        UpdateSongRequest:
          type: object
          properties:
            title: { type: string }
            artist: { type: string }
  • Ahora: PUT /songs/{id} vuelve a ser reemplazo completo e idempotente. Por eso, UpdateSongRequest exige ambos campos.

    components:
      schemas:
        UpdateSongRequest:
          type: object
          required:
              - title
              - artist
          properties:
            title: { type: string }
            artist: { type: string }

Nota OpenAPI: requestBody.required: true solo marca que hay cuerpo; los campos obligatorios se definen en el Schema mediante required: [...]. (Swagger, OpenAPI Initiative Publications)

Ejemplo de uso (PUT = reemplazo completo)

{
  "title": "Bohemian Rhapsody",
  "artist": "Queen"
}

🔍 Recordatorio rápido de semántica HTTP (safe / idempotent)

  • GETsafe e idempotent.
  • POST → no safe, no idempotent por defecto.
  • PUT → no safe, sí idempotent (reemplaza por completo).
  • PATCH → no safe, no idempotent por defecto (puede diseñarse idempotente). (RFC Editor, MDN Web Docs, IETF Datatracker)

Safe: métodos cuya semántica es solo lectura y no piden cambios de estado en el servidor.

No safe: métodos que sí pueden modificar el estado o producir efectos secundarios.

Idempotente: en HTTP, repetir la misma solicitud varias veces deja el recurso/servidor en el mismo estado que si se hiciera una sola vez (aunque el código/respuesta pueda variar).

¿Qué significa este cambio para vos?

  • Si tu implementación hacía que PUT aceptara parciales, ajustala para que requiera title y artist (reemplazo completo).
  • Si ya tenías PUT como reemplazo total, no necesitás cambios.
  • El formato de respuestas no cambia.

Fuentes