WP REST API Opprette, oppdatere og slette data

I den forrige delen av serien så vi på hvordan vi kan bruke WP REST API for å hente innhold fra serveren. Vi lærte å hente innhold for forskjellige ressurser, inkludert innlegg, postmeta, koder, kategorier, etc. Dette er en kraftig funksjon siden dette innholdet kan brukes hvor som helst innenfor eller utenfor WordPress.

Vi lærte også om ALTERNATIVER be om at selvdokumenterer API-en ved å oppgi alle ruter, deres endepunkter og deres respektive argumenter. Dette reduserer behovet for å stole på en ekstern dokumentasjon for API og gjør at endringer kan oppdages ganske raskt hvis API-en er oppdatert eller endret.

Etter å ha sett på disse funksjonene, vil vi nå i den nåværende opplæringen fokusere vår oppmerksomhet på de tre andre operasjonene av CRUD, dvs. opprette, oppdatere og slette data ved hjelp av WP REST API.

I denne opplæringen vil vi:

  • analyser hvilke ressurser som støtter opprette, oppdatere og slette metoder
  • lær å lage, oppdatere og slette ressurser
  • se på måter å sende data på forespørselen for å skape en ressurs
  • analysere serverrespons og ulike svarkoder

Så la oss begynne med å analysere hvilke ressurser som støtter oppretting, oppdatering og sletting av metoder ved hjelp av WP REST API.

Sjekker for Opprett, Oppdater og Slett Metoder i rutene

Før vi dykker rett inn i å lage og oppdatere data med WP REST API, må vi analysere hvilke ruter som støtter opprettelses- og oppdateringsmetoder. Vi gjør dette ved å sjekke ruter og fremgangsmåter eiendom i sine endepunkter. Dette kan gjøres ved å sende en egen ALTERNATIVER Be om individuelle ruter, men en mer praktisk måte er å sende en  forespørsel til / Wp-.json indeksrute som vi gjorde i den forrige delen av serien.

Sende en  forespørsel til / Wp-.json rute returnerer et objekt som inneholder alle ruter og deres endepunkter i ruter eiendom.

Det er i disse individuelle rutene at vi kan sjekke om en bestemt ressurs støtter POST, SETTE, og SLETT metoder. La oss begynne med å analysere innlegg ressurs.

De innlegg ressursen avslører data med følgende to ruter:

/ wp / v2 / innlegg / wp / v2 / innlegg / (? P[\ D] +)

Den første ruten peker på samlingen av postobjektet, og dens metode Eiendommen er som følger:

"metoder": ["GET", "POST"],

Dette fremgangsmåter eiendom viser at / innlegg rutestøtter  og POST metoder for henting og opprettelse av data henholdsvis.

For / innlegg / (? P[\ D] +) rute, som peker på en enkelt innlegg ressurs, fremgangsmåter Eiendommen er som følger:

"metoder": ["GET", "POST", "PUT", "PATCH", "DELETE"],

Som det fremgår av ovennevnte kode, er / innlegg / (? P[\ D] +) ruten støtter , POST, SETTE, LAPP, og SLETT fremgangsmåter.

Ved å undersøke begge rutene ovenfor kan vi konkludere med at / innlegg ruten støtter ressursinnhenting og opprettelse. Og / innlegg / (? P[\ D] +) ruten støtter ressursinnhenting, samt oppdatering og sletting. Selv om det støtter POST Metode, denne ruten støtter ikke ressursopprettelsen som vi vil se i et eksempel nedenfor.

Derfor kan ruter som peker på en enkelt ressurs ikke brukes til å skape innhold, selv om de støtter POST metode. Dette er fordi, for disse ruter, den POST, SETTE, og LAPP Metoder brukes til å oppdatere innhold i WP REST API.

For å konkludere denne delen, la oss oppsummere konseptene vi har lært her:

  • Vi kan sjekke hvilke ruter som støtter , POST, og SLETT metoder ved å sende en ALTERNATIVER be om.
  • Ruter som peker på en enkelt enhet kan ikke brukes til å lage innhold. De er vant til å oppdatere innhold, selv om de støtter POST metode.

Etter å ha analysert forskjellige ruter, er vi nå klare til å lage innhold ved hjelp av WP REST API, og vi vil begynne med å utforske innlegg ressurs.

Opprette og oppdatere et innlegg

La oss lage et innlegg ved å sende en testforespørsel fra Postman eller en annen HTTP-klient. For å gjøre dette, brann opp HTTP-klienten din og send en POST forespørsel til / innlegg rute. Men før det, husk at ressursskaping, sletting og oppdatering krever godkjenning som bruker med edit_posts rettigheter. Så vi vil bruke den grunnleggende autentiseringsmetoden som vi lærte i den andre delen av denne serien.

I utgangspunktet sender vi en tom forespørsel kropp sammen med forespørselen til testformål:

$ POST / wp / v2 / innlegg

Serveren vil returnere a 400 Ugyldig forespørsel feil siden de nødvendige argumentene manglet i forespørselslegemet. Følgende svar vil bli returnert av serveren:

Svaret sier at en av innhold, tittel, eller utdrag er nødvendig for å opprette et innleggsobjekt. Disse argumentene kan sendes på forespørsel i forespørselslegemet på en av følgende tre måter:

  1. Som et JSON-objekt
  2. Ved å bruke skjemaer
  3. Som URL-parametere

Det er bare et spørsmål om valg å bruke noen av disse metodene, og vi vil se nærmere på dem senere i denne opplæringen. Men la oss nå bruke den første metoden for å lage et innlegg.

For å sende argumenter som et JSON-objekt i Postman, bytt til Kropp kategorien og velg radioknapp. Deretter velger du fra rullegardinmenyen til høyre JSON (søknad / json) alternativ. I tekstområdet nedenfor kan du legge til JSON-kroppen.

Foreløpig har denne JSON kroppen bare en eiendom for tittel av innlegget.

Send forespørselen ved å klikke på Sende knapp. Hvis alt går bra, vil serveren returnere en 201 - Opprettet status med det nyopprettede postobjektet som svaret.

Standardstatus for dette nyopprettede innlegget er utkast. Vi kan oppdatere status, så vel som noen andre egenskaper, ved å sende en annen POSTSETTE, eller LAPP be om. ID av posten returnert i mitt tilfelle er 232, så jeg sender en forespørsel til følgende endepunkt:

$ POST / wp / v2 / innlegg / 232

Behandlingsorganet for å oppdatere status og innhold Eiendom ser slik ut:

"status": "publiser", "innhold": "Dette er innholdet i innlegget"

Etter at forespørselen er sendt, returnerer serveren a 200 - OK status, noe som betyr at innlegget har blitt oppdatert.

I eksemplet ovenfor kom vi over følgende tre argumenter for å opprette et innlegg:

  1. tittel
  2. status
  3. innhold

Den komplette listen over støttede argumenter for å lage et innlegg kan hentes med en enkel ALTERNATIVER be om følgende:

$ OPTIONS / wp / v2 / innlegg

Vi kan da sjekke args eiendom i POST metoden array.

Nå som vi har lært hvordan vi kan opprette og oppdatere et innlegg, la oss ta en titt på noen flere ressurser vi kan jobbe med.

Opprette og oppdatere innlegg Meta

Oppdatering: Arbeider med post og side meta i WP REST API krever nå et følgesvennplugin tilgjengelig på GitHub av WP REST API-teamet.

Post-meta kan opprettes ved å sende en POST forespørsel til følgende rute:

/ WP / v2 / innlegg / (? P[\ D] +) / meta

Hvor (? P[\ D] +) er ID for foreldreposten. Jeg bruker IDen til innlegget vi opprettet i forrige seksjon, som er 232.

På samme måte som hvordan vi sender en forespørsel om å opprette et innlegg, kan et JSON-objekt bestående av to egenskaper sendes for å lage et innleggsmetode. Disse to egenskapene er nøkkel og verdi.

"nøkkel": "navn", "verdi": "bilal"

Verdiene av nøkkel og verdi eiendommene er Navn og Bilal henholdsvis.

Send forespørselen, og serveren vil returnere a 201 - Opprettet statuskode, som viser at postmetaen er blitt opprettet. Det nyopprettede innleggmetaobjektet blir også returnert i svaret:

Vær oppmerksom på at når du skriver denne veiledningen, støtter WP REST API ikke heltallverdier for å opprette postmeta. Hvis vi prøver å sende en heltallverdi i JSON-objektet for å lage postmeta, a 400 Ugyldig forespørsel statuskode vil bli returnert av serveren.

"nøkkel": "verdi", "verdi": 12345

Legg merke til de manglende sitatene rundt verdien 12345. Svaret som returneres, vil være som følger:

Så alt du sender sammen med forespørselen om å opprette postmeta, skal være i strengformat.

Dataoppretting og oppdateringsmetoder

Så langt i denne opplæringen har vi brukt JSON-format i forespørselsorganet for å opprette og oppdatere ressurser. La oss se på alle alternativene som WP REST API gir for å lage og oppdatere data.

Sende data som URL-parametere

Den enkleste måten å sende data på forespørselen er å sende den som nettadresseparametere. Vurder følgende POST forespørsel om å opprette et innlegg:

$ POST / wp / v2 / innlegg? Title = the + title & content = dette + er + det + innholdet

Ovennevnte forespørsel sender to parametere til serveren for tittel og innhold av innlegget.

Tilsvarende, for å lage postmeta for et innlegg som har en ID på 232, vi bruker følgende POST be om:

$ POST / wp / v2 / innlegg / 232 / meta? Nøkkel = navn og verdi = Bilal

Ovennevnte forespørsel vil opprette følgende meta-objekt:

Denne metoden passer best når parametrene er korte strenger, som i eksemplet ovenfor. Men da antallet parametere og lengden på verdiene øker, blir det vanskelig å administrere dem som nettadresseparametere.

Sende data som et JSON-objekt

Ved å bruke denne metoden tar vi argumenter som et nøkkel / verdi-par i et JSON-objekt for å sende dem sammen med forespørselen. Til nå har vi brukt Postman til å sende forespørsler til serveren. Vi skal nå se på hvordan vi kan implementere denne metoden ved hjelp av HTML og jQuery.

Vurder følgende enkle skjema som består av tre felt for tittel, status, og innhold:

Når ovennevnte skjema er sendt, utføres følgende JavaScript-kode (jQuery):

var postForm = $ ('# post-form'); var jsonData = funksjon (form) var arrData = form.serializeArray (), objData = ; $ .each (arrData, funksjon (indeks, elem) objData [elem.name] = elem.value;); returnere JSON.stringify (objData); ; postForm.on ('submit', funksjon (e) e.preventDefault (); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / innlegg' 'POST', data: jsonData (postform), crossDomain: true, contentType: 'application / json', førSend: funksjon (xhr) xhr.setRequestHeader ('Authorization', 'Basic brukernavn: passord');, suksess: funksjon (data) console.log (data);, feil: funksjon (feil) console.log (error);;;);

Ved innsending av ovennevnte skjema sender vi en AJAX forespørsel til / WP / v2 / innlegg rute. De jsonData () Metoden aksepterer en jQuery-forekomst av HTML-skjemaet og konverterer dataene til JSON-format. Denne JSON-data brukes da i data eiendom av $ .Ajax () metode. I tillegg stiller vi innholdstypen til application / json ved å bruke innholdstype eiendom.

Før du sender forespørselen, setter vi toppteksten for å inkludere Autorisasjon header for bruk av den grunnleggende godkjenningsmetoden. Vi har allerede lært å sette opp og bruke den grunnleggende godkjenningsmetoden i den andre delen av denne serien.

Endelig sendes forespørselen til / WP / v2 / innlegg rute, og et nytt innlegg er opprettet. Dette nyopprettede postobjektet returneres av serveren som svar, og vi logger det ganske enkelt inn i konsollen inne i suksess() metode.

Eksemplet ovenfor viser bruk av JSON-format for å sende data langs forespørselen. Kilden til dette JSON-objektet kan være alt annet enn en HTML-skjema, avhengig av arkitekturen i søknaden din.

Vær oppmerksom på at for at ovennevnte kode skal fungere riktig, må du kanskje sette inn Tilgang-Control-La-topper headerfelt for å inkludere Autorisasjon og Innholdstype verdier. Dette kan gjøres ved å legge til følgende kode i WordPress .htaccess fil:

Header sett Access-Control-Allow-Headers "Content-Type, Authorization"

La oss nå se på å sende data via HTML-skjemaer.

Sende data ved hjelp av skjemaer

Den siste måten å sende data på forespørselen, er å bruke HTML-skjemaer. Disse skjemaene skal inneholde felt med Navn Egenskap. De Navn Attributtet tjener som et argumentnavn som tittel, statusinnhold, etc. Verdiene av disse feltene tjener som verdien av disse argumentene.

Vi kan bruke det samme HTML-skjemaet som ble opprettet i forrige eksempel, og bruk deretter følgende kode for å opprette et nytt innlegg:

var postForm = $ ('# post-form'); postForm.on ('submit', funksjon (e) e.preventDefault (); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / innlegg' 'POST', data: postForm.serialize (), crossDomain: true, beforeSend: funksjon (xhr) xhr.setRequestHeader ('Authorization', 'Basic brukernavn: passord');, suksess: funksjon (data) konsoll. logg (data);););

Ovennevnte kode er den samme som forrige eksempel, bortsett fra at vi fjernet jsonData () metode og vi sender nå skjemadataene i strengformat ved hjelp av jQuery's serialiserer () metode. Den ovennevnte jQuery-koden bruker standardinnstillingen application / x-www-skjema-urlencoded innholdstype som sender dataene i form av en gigantisk streng med argumenter adskilt av & signere og deres verdier blir tildelt ved hjelp av = skilt. Dette ligner noe på å sende data som nettadresseparametere, bortsett fra at det ikke avslører data. Dette er en effektiv måte å sende data hvis dataene inneholder bare alfanumeriske tegn.

For å sende binære (ikke-alfanumeriske) data bruker vi multipart / skjema-data innholdstype. Denne metoden kan brukes hvis vi trenger å laste opp bilder eller andre filer ved hjelp av WP REST API.

For å sende skjemadata i Postman, kan du bytte til Kropp kategorien, og bruk deretter enten skjema-data eller x-www-skjema-urlencoded alternativ.

Argumenter kan da defineres i nøkkel / verdi par for å sende sammen forespørselen.

Detaljert informasjon om forskjellige formtyper finnes i W3C-spesifikasjonene.

Opplasting av medier ved hjelp av multipart / skjema-data Innholdstype

Nå som vi har sett på x-www-skjema-urlencoded formtype, som sender data i form av en streng, la oss begynne å utforske en mer avansert formkodingstype, dvs.. multipart / skjema-data.

De multipart / skjema-data innholdstype brukes når det gjelder binære data, og dermed kan den brukes til å laste opp bilder eller andre filtyper til serveren.

I det følgende eksemplet bruker vi et enkelt HTML-skjema som består av en inngangs [type =”file”] og litt av jQuery å laste opp bilder til serveren ved hjelp av / Wp / v2 / media rute.

Vurder følgende HTML-skjema:

Følgende JavaScript vil bli utført når ovennevnte skjema er sendt inn:

var imageForm = $ ('# image-form'), fileInput = $ ('# fil'), formData = ny FormData (); imageForm.on ('submit', funksjon (e) e.preventDefault (); formData.append ('fil', filInput [0] .files [0]); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / media ', metode:' POST ', data: formData, crossDomain: true, contentType: false, processData: false, beforeSend: funksjon (xhr) xhr.setRequestHeader 'Godkjenning', 'Grunnleggende brukernavn: passord');, suksess: funksjon (data) console.log (data);, feil: funksjon (feil) console.log (feil););) ;

Her får vi først en jQuery-forekomst av skjemaet og dets inngangsfelt. Deretter initialiserer vi en ny FormData gjenstand. De FormData grensesnitt gir en måte å konstruere et sett med skjemafelt med nøkkel / verdi par og bruker samme format som multipart / skjema-data form kodingstype.

Når skjemaet er sendt, forhindrer vi innlevering ved å ringe .preventDefault () metode på hendelsesobjektet. Vi legger deretter til et nytt felt til formData eksempel ved bruk av .føye () metode. De .føye () Metoden aksepterer to argumenter for Navn og verdi av feltet. WP REST API håndhever Navn Attributtet til filinngangsfeltet skal være fil. Derfor satte vi det første argumentet - den Navn-å være fil, og for det andre argumentet passerer vi en filblombobjekt ved å referere til inngangselementet.

Som standard gikk dataene inn i data eiendom av jQuery.ajax () Metoden behandles til en spørringsstreng. Siden vi laster opp bildefiler her, ønsker vi ikke at det skal skje, og for det formålet setter vi inn processData eiendom til falsk. Vi satte også innholdstype eiendom til falsk å forhindre application / x-www-skjema-urlencoded blir sendt som standard innholdstype til serveren.

Og endelig satte vi Autorisasjon header for å autentisere oss selv som bruker med edit_posts privilegier.

Pass på at du kjører det ovennevnte skriptet fra en server. Hvis alt går bra og filen lastes opp, returnerer serveren det nyopprettede medieobjektet.

Dette bildet kan da settes som et kjennetegnet bilde for et innlegg.

Etter å ha studert måter å opprette og oppdatere ressurser ved hjelp av WP REST API, kan vi se hvordan vi kan slette dem.

Slette data med WP REST API

Slette data med WP REST API er like enkelt som å sende en SLETT forespørsel til en bestemt ressurs.

Hvis vi trenger å slette et innlegg som har en ID på 10, vi sender følgende SLETT be om:

$ DELETE / wp / v2 / innlegg / 10

Dette vil flytte innlegget til søppel, men vil ikke slette det permanent. For permanent å slette et innlegg bruker vi makt argument:

$ DELETE / wp / v2 / posts / 10? Force = true

Legg merke til at makt argumentet kreves når en deling av en ressurs som ikke støtter papirkurven. Eksempler på slike ressurser er postmeta og media.

Når det er sagt, avslutter vi nåværende del av serien.

Hva skjer neste gang?

I denne lange opplæringen så vi på å lage, oppdatere og slette ulike typer ressurser ved hjelp av WP REST API. Vi lærte om forskjellige måter å sende data på forespørsel, inkludert å sende data som nettadresseparametere, i JSON-format, og ved å bruke skjemaer. På slutten av opplæringen lærte vi om å slette ressurser ved å sende en SLETT be om.

I neste og siste utgave av serien vil vi lære om den interne strukturen til WP REST API og dens klasser. Vi vil også lære å utvide API for å modifisere serverresponser. Se deg i neste del av serien - hold deg innstilt ...