Skip to content

Instantly share code, notes, and snippets.

@esuomi
Last active December 26, 2015 16:29
Show Gist options
  • Save esuomi/7180371 to your computer and use it in GitHub Desktop.
Save esuomi/7180371 to your computer and use it in GitHub Desktop.
UPDATE/CREATE REST-rajapinnoissa

simppeli POST

POST /collection/{resourceId} + request payload

  • Jos resurssi on uusi, luodaan resurssi. (=CREATE)
  • Jos resurssi on olemassa, asetetaan resurssin arvoksi annettu tieto. (=UPDATE) Osittainen resurssin päivitys mahdollista.

simppeli PUT

PUT /collection + request payload

  • muuten sama kuin POST mutta palvelin generoi id:n/slugin

Conditional PUT ETagilla

PUT /collection + request payload

if(hasEtag() { 
  if (etagMatchesCurrent() { 
    update(); 
    return 200;  // OK
  } else {
    return 412;  // Precondition failed
  } 
} else { 
  if (resourceExists()) { 
    return 409;  // Conflict
  } else { 
    create(); 
    return 201;  // Created
  } 
}
  • virheenkäsittely puuttuu esimerkistä, riippuu esmes heittääkö kantaoperaatiot virheitä
  • palautettava uusi ETag

hasEtag() If-Match -headerin olemassaolon tarkistus

etagMatchesCurrent() If-Match -headerin arvo vastaa aksessoidun resurssin ETagin arvoa

resourceExists() vastaavalle avaimelle on jo jotain tallennettu

Huomioita

PUT /collection/{resourceId} + mitä vain

POST /collection + mitä vain

  • käytännössä batch update/insert
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment