WP REST API Skapa, uppdatera och ta bort data

I den tidigare delen av serien tittade vi på hur vi kan använda WP REST API för att hämta innehåll från servern. Vi lärde oss att hämta innehåll för olika resurser, inklusive inlägg, posta meta, taggar, kategorier etc. Det här är en kraftfull funktion eftersom det här innehållet kan användas var som helst inom eller utom WordPress.

Vi lärde oss också om ALTERNATIV begära att själv dokumenterar API: n genom att lista alla rutter, deras slutpunkter och deras respektive argument. Detta minskar behovet av att förlita sig på en extern dokumentation för API: n och gör att ändringar kan upptäckas ganska snabbt om API: n har uppdaterats eller ändrats.

Efter att ha tittat på dessa funktioner kommer vi nu i den aktuella handledningen att fokusera vår uppmärksamhet på de andra tre operationerna hos CRUD, dvs skapa, uppdatera och radera data med hjälp av WP REST API.

I denna handledning kommer vi att

  • analysera vilka resurser som stöd för att skapa, uppdatera och ta bort metoder
  • Lär dig att skapa, uppdatera och ta bort resurser
  • titta på sätt att skicka data längs begäran för att skapa en resurs
  • analysera serverrespons och olika svarskoder

Så låt oss börja med att analysera vilka resurser som stödjer skapandet, uppdateringen och raderingen av metoderna med hjälp av WP REST API.

Kollar efter att skapa, uppdatera och ta bort metoder i rutorna

Innan vi dyker direkt in i att skapa och uppdatera data med WP REST API måste vi analysera vilka rutter som stödjer skapande och uppdateringsmetoder. Vi gör det genom att kolla rutorna och metoder egendom i sina slutpunkter. Detta kan göras genom att skicka en separat ALTERNATIV Förfrågan på enskilda vägar, men ett bekvämare sätt är att skicka en SKAFFA SIG begäran till / Wp-json indexväg som vi gjorde i den tidigare delen av serien.

Skickar en SKAFFA SIG begäran till / Wp-json rutt returnerar ett objekt som innehåller alla rutter och deras slutpunkter i rutan rutter fast egendom.

Det är i dessa enskilda vägar att vi kan kontrollera om en specifik resurs stöder POSTA, SÄTTA, och RADERA metoder. Låt oss börja med att analysera inlägg resurs.

De inlägg resursen exponerar data med följande två rutter:

/ wp / v2 / inlägg / wp / v2 / inlägg / (? P[\ D] ^)

Den första rutten pekar på samlingen av postobjektet och dess metod fastigheten är enligt följande:

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

Detta metoder egendom visar att / inlägg ruttstöd SKAFFA SIG och POSTA metoder för att hämta respektive skapa data.

För / inlägg / (? P[\ D] ^) rutt, vilket pekar på en enda inlägg resurs, metoder fastigheten är enligt följande:

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

Som framgår av ovanstående kod, / inlägg / (? P[\ D] ^) rutt stöder SKAFFA SIG, POSTA, SÄTTA, LAPPA, och RADERA metoder.

Genom att undersöka båda ovanstående linjer kan vi dra slutsatsen att / inlägg Rutt stöder resurshämtning och skapande. Och den / inlägg / (? P[\ D] ^) Rutt stöder resurshämtning samt uppdatering och radering. Fast det stöder POSTA Metod, denna rutt stöder inte resursskapande som vi kommer att se i ett exempel nedan.

Därför kan rutter som pekar på en enda resurs inte användas för att skapa innehåll, även om de stöder POSTA metod. Detta beror på, för dessa vägar, POSTA, SÄTTA, och LAPPA metoder används för att uppdatera innehåll i WP REST API.

För att avsluta det här avsnittet, låt oss sammanfatta de begrepp vi har lärt oss här:

  • Vi kan kontrollera vilka rutter som stödjer SKAFFA SIG, POSTA, och RADERA metoder genom att skicka en ALTERNATIV begäran.
  • Rutter som pekar på en enskild enhet kan inte användas för att skapa innehåll. De brukar uppdatera innehåll, även om de stöder POSTA metod.

Efter att ha analyserat olika vägar är vi nu redo att skapa innehåll med hjälp av WP REST API, och vi börjar med att utforska inlägg resurs.

Skapa och uppdatera en post

Låt oss skapa ett inlägg genom att skicka en testförfrågan från Postman eller någon annan HTTP-klient. För att göra detta ska du avfyra din HTTP-klient och skicka en POSTA begäran till / inlägg rutt. Men innan det, kom ihåg att resursskapande, radering och uppdatering kräver autentisering som användare med edit_posts rättigheter. Så vi använder den grundläggande autentiseringsmetoden som vi lärde oss i den andra delen av serien.

Ursprungligen skickar vi en tom förfrågan till förfrågningsunderlaget:

$ POST / wp / v2 / inlägg

Servern kommer att returnera a 400 Dålig Förfrågan fel eftersom de begärda argumenten saknades i begäran. Följande svar kommer att returneras av servern:

Svaret säger att endera av innehåll, titel, eller utdrag krävs för att skapa ett postobjekt. Dessa argument kan skickas längs begäran i förfrågan på något av följande tre sätt:

  1. Som ett JSON-objekt
  2. Genom att använda formulär
  3. Som URL-parametrar

Det är bara en fråga om valet att använda någon av dessa metoder, och vi kommer att undersöka dem närmare senare i denna handledning. Men låt oss nu använda den första metoden för att skapa ett inlägg.

För att skicka argument som ett JSON-objekt i Postman, växla till Kropp fliken och välj Radio knapp. Sedan väljer du från menyn till höger JSON (ansökan / json) alternativ. I textområdet nedan kan du sedan lägga till JSON-kroppen.

För närvarande rymmer denna JSON-kropp endast en egenskap för titel av posten.

Skicka förfrågan genom att klicka på Skicka knapp. Om allt går bra kommer servern att returnera en 201 - Skapat status med det nyskapade postobjektet som svaret.

Standardstatus för den här nya posten är förslag. Vi kan uppdatera status, liksom några andra egenskaper, genom att skicka en annan POSTASÄTTA, eller LAPPA begäran. ID-numret för inlägget som returneras i mitt fall är 232, så skickar jag en förfrågan till följande ändpunkt:

$ POST / wp / v2 / inlägg / 232

Förfrågan om att uppdatera status och den innehåll egendom ser så här ut:

"status": "publicera", "innehåll": "Detta är innehållet i inlägget"

Efter att ha skickat begäran kommer servern att returnera en 200 - OK status, vilket betyder att inlägget har uppdaterats framgångsrikt.

I exemplet ovan kom vi över följande tre argument för att skapa ett inlägg:

  1. titel
  2. status
  3. innehåll

Den fullständiga listan över argument som stöds för att skapa ett inlägg kan hämtas med en enkel ALTERNATIV begära följande:

$ OPTIONS / wp / v2 / inlägg

Vi kan då kolla args egendom i POSTA metodmatris.

Nu när vi har lärt oss hur vi kan skapa och uppdatera ett inlägg, låt oss ta en titt på några fler resurser vi kan arbeta med.

Skapa och uppdatera Post Meta

Uppdatering: Arbeta med post och sida meta i WP REST API kräver nu ett kompanion-plugin tillgängligt på GitHub av WP REST API-teamet.

Post meta kan skapas genom att skicka en POSTA begära följande väg:

/ WP / V2 / tjänster / (? P[\ D] ^) / meta

Var (? P[\ D] ^) är den ursprungliga postens ID Jag använder namnet på det inlägg som vi skapade i föregående avsnitt, vilket är 232.

På samma sätt som hur vi skickar en begäran om att skapa ett postobjekt kan ett JSON-objekt bestående av två egenskaper skickas för att skapa en postmeta. Dessa två egenskaper är nyckel- och värde.

"nyckel": "namn", "värde": "Bilal"

Värdena för nyckel- och värde egenskaper är namn och Bilal respektive.

Skicka förfrågan och servern kommer att returnera a 201 - Skapat statuskod, som visar att postmeta har skapats framgångsrikt. Det nybildade postmetaobjektet kommer också att returneras i svaret:

Observera att WP REST API inte stöder heltal för att skapa postmeta vid skrivningstillfället. Om vi ​​försöker skicka ett heltal i JSON-objektet för att skapa postmeta, a 400 Dålig Förfrågan statuskoden returneras av servern.

"nyckel": "värde", "värde": 12345

Notera de saknade citaten runt värdet 12345. Svaret som returneras kommer att vara som följande:

Så vad du skickar längs begäran om att skapa postmeta borde vara i strängformat.

Data skapande och uppdateringsmetoder

Hittills i denna handledning har vi använt JSON-format i begäran om att skapa och uppdatera resurser. Låt oss titta på alla alternativ som WP REST API tillhandahåller för att skapa och uppdatera data.

Sänder data som URL-parametrar

Det enklaste sättet att skicka data längs förfrågan är att skicka det som URL-parametrar. Tänk på följande POSTA Begäran om att skapa ett inlägg:

$ POST / wp / v2 / inlägg? Title = the + title & content = detta + är + det + innehållet

Ovanstående förfrågan skickar två parametrar till servern för titel och den innehåll av posten.

På samma sätt, för att skapa postmeta för ett inlägg med ett ID på 232, vi använder följande POSTA begäran:

$ POST / wp / v2 / inlägg / 232 / meta? Nyckel = namn & värde = Bilal

Ovanstående förfrågan kommer att skapa följande metaobjekt:

Denna metod passar bäst när parametrarna är korta strängar, som i exemplet ovan. Men eftersom antalet parametrar och längden på deras värden ökar blir det svårt att hantera dem som URL-parametrar.

Sänder data som ett JSON-objekt

Med hjälp av denna metod tar vi argument som ett nyckel / värdepar i ett JSON-objekt för att skicka dem längs begäran. Hittills har vi använt Postman för att skicka förfrågningar till servern. Vi ska nu titta på hur vi kan implementera denna metod med hjälp av HTML och jQuery.

Tänk på följande enkla formulär som består av tre fält för titel, status, och den innehåll:

När ovanstående formulär skickas, körs följande JavaScript-kod (jQuery):

var postForm = $ ('# post-form'); var jsonData = funktion (form) var arrData = form.serializeArray (), objData = ; $ .each (arrData, funktion (index, elem) objData [elem.name] = elem.value;); returnera JSON.stringify (objData); ; post-format.on ("Skicka", funktion (e) e.preventDefault (); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / inlägg' "Post", data: jsonData (postform), crossDomain: true, contentType: 'application / json', föreSänd: funktion (xhr) xhr.setRequestHeader ('Authorization', 'Basic användarnamn: lösenord');, framgång: funktion (data) console.log (data);, fel: funktion (fel) console.log (error);););

Vid inlämning av ovanstående formulär skickar vi en AJAX-förfrågan till / Wp / v2 / inlägg rutt. De jsonData () Metoden accepterar en jQuery-instans av HTML-formuläret och omvandlar data till JSON-format. Denna JSON-data används sedan i data egenskapen hos $ .Ajax () metod. Dessutom ställer vi in ​​innehållstypen till application / json genom att använda innehållstyp fast egendom.

Innan vi skickar begäran, ställer vi in ​​rubriken för att inkludera Tillstånd rubrik för att använda den grundläggande autentiseringsmetoden. Vi har redan lärt oss att konfigurera och använda den grundläggande autentiseringsmetoden i den andra delen av denna serie.

Slutligen skickas förfrågan till / Wp / v2 / inlägg rutt och ett nytt inlägg skapas. Det här nya skapade postobjektet returneras av servern som svar och vi loggar det helt enkelt in i konsolen inuti Framgång() metod.

Ovanstående exempel visar användningen av JSON-format för att skicka data längs begäran. Källan till det här JSON-objektet kan vara allt annat än en HTML-blankett, beroende på arkitekturen i din applikation.

Observera att för att ovanstående kod ska fungera korrekt måste du kanske ställa in Åtkomst-Control-allow-rubriker rubrikfält för att inkludera Tillstånd och Innehållstyp värden. Detta kan göras genom att lägga till följande kod i din WordPress .htaccess fil:

Header set Access-Control-Allow-Headers "Innehållstyp, auktorisering"

Låt oss nu titta på att skicka data via HTML-formulär.

Skicka data med hjälp av formulär

Det sista sättet att skicka data längs begäran är att använda HTML-formulär. Dessa formulär ska innehålla fält med namn attribut. De namn Attributet fungerar som ett argumentnamn som titel, statusinnehåll, etc. Värdena för dessa fält tjänar som värdet av dessa argument.

Vi kan använda samma HTML-form som skapades i föregående exempel och använd sedan följande kod för att skapa ett nytt inlägg:

var postForm = $ ('# post-form'); post-format.on ("Skicka", funktion (e) e.preventDefault (); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / inlägg' 'POST', data: postForm.serialize (), crossDomain: true, beforeSend: funktion (xhr) xhr.setRequestHeader ('Authorization', 'Basic användarnamn: lösenord');, framgång: funktion (data) konsol. logg (data);););

Ovanstående kod är densamma som föregående exempel, förutom att vi tog bort jsonData () metod och vi skickar nu formulärdata i strängformat med jQuery s serialisera () metod. Ovanstående jQuery-kod använder standardvärdet application / x-www-form-urlencoded innehållstyp som skickar data i form av en jätte sträng med argument separerade av & signera och deras värden tilldelas med hjälp av = skylt. Detta liknar något som sänder data som URL-parametrar, förutom att det inte exponerar data. Detta är ett effektivt sätt att skicka data om data bara innehåller alfanumeriska tecken.

För att skicka binär (icke-alfanumerisk) data använder vi multipart / form-data innehållstyp. Den här metoden kan användas om vi behöver ladda upp bilder eller andra filer med hjälp av WP REST API.

För att skicka formulärdata i Postman kan du växla till Kropp fliken och använd sedan antingen form-data eller x-www-form-urlencoded alternativ.

Argument kan sedan definieras i nyckel / värdepar för att skicka längs begäran.

Detaljerad information om olika formtyper finns i W3C-specifikationerna.

Överföring av media med hjälp av multipart / form-data Innehållstyp

Nu när vi har tittat på x-www-form-urlencoded formtyp, som skickar data i form av en sträng, låt oss börja utforska en mer avancerad formkodningstyp, dvs. multipart / form-data.

De multipart / form-data innehållstyp används vid hantering av binär data och kan därför användas för att ladda upp bilder eller andra filtyper till servern.

I följande exempel använder vi en enkel HTML-form som består av en input [type =”fil”] och lite jQuery att ladda upp bilder till servern med hjälp av / Wp / v2 / media rutt.

Tänk på följande HTML-formulär:

Följande JavaScript kommer att utföras när formuläret ovan lämnas in:

var imageForm = $ ('# image-form'), fileInput = $ ('# fil'), formData = ny FormData (); imageForm.on ('submit', funktion (e) e.preventDefault (); formData.append ('fil', filInput [0] .files [0]); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / media ", metod:" POST ", data: formData, crossDomain: true, contentType: false, processData: false, beforeSend: function (xhr) xhr.setRequestHeader 'Godkännande', 'Basic användarnamn: lösenord');, framgång: funktion (data) console.log (data);, fel: funktion (fel) console.log (error );;) ;

Här får vi först en jQuery-instans av formuläret och dess inmatningsfält. Då initierar vi ett nytt FormData objekt. De FormData gränssnittet ger ett sätt att konstruera en uppsättning formfält med nyckel / värdepar och använder samma format som multipart / form-data formkodningstyp.

När formuläret lämnas in, förhindrar vi inlämningen genom att ringa .prevent () metod på händelseobjektet. Vi lägger sedan till ett nytt fält till formData exempel med hjälp av .bifoga() metod. De .bifoga() Metoden accepterar två argument för namn och den värde av fältet. WP REST API verkställer namn attributet för filinmatningsfältet att vara fil. Därför ställde vi det första argumentet - den namn-att vara fil, och för det andra argumentet passerar vi ett filblobobjekt genom att hänvisa till ingångselementet.

Som standard skickades data till data egenskapen hos jQuery.ajax () Metoden bearbetas till en frågesträng. Eftersom vi laddar upp bildfiler här vill vi inte att det ska hända, och för det ändamålet ställer vi in processData egendom till falsk. Vi ställer också in innehållstyp egendom till falsk att förebygga application / x-www-form-urlencoded skickas som standard innehållstyp till servern.

Och slutligen sätter vi på Tillstånd header för att autentisera oss som användare med edit_posts privilegier.

Var noga med att köra ovanstående script från en server. Om allt går bra och filen laddas upp, returnerar servern det nyskapade medieobjektet.

Den här bilden kan sedan ställas in som en bild för en post.

När vi har tittat på sätt att skapa och uppdatera resurser med hjälp av WP REST API, låt oss se hur vi kan ta bort dem.

Radera data med WP REST API

Att radera data med WP REST API är lika enkelt som att skicka en RADERA begära en viss resurs.

Om vi ​​behöver ta bort ett inlägg med ett ID på 10, vi skickar följande RADERA begäran:

$ DELETE / wp / v2 / inlägg / 10

Detta flyttar posten till papperskorgen men tar inte bort det permanent. För att permanent ta bort ett inlägg använder vi tvinga argument:

$ DELETE / wp / v2 / inlägg / 10? Force = true

Observera att tvinga argument krävs vid radering av en resurs som inte stöder skräp. Exempel på sådana resurser är postmeta och media.

Med detta sagt, avslutar vi nu den nuvarande delen av serien.

Vad är nästa??

I den här långa handledningen såg vi på att skapa, uppdatera och ta bort olika typer av resurser med hjälp av WP REST API. Vi lärde oss om olika sätt att skicka data längs begäran, inklusive att skicka data som URL-parametrar, i JSON-format och genom att använda formulär. I slutet av handledningen lärde vi oss att radera resurser genom att skicka en RADERA begäran.

I nästa och sista delen av serien lär vi oss om den interna strukturen för WP REST API och dess klasser. Vi kommer också att lära oss att förlänga API: n för att modifiera serverns svar. Se dig i nästa del av serien - håll dig uppdaterad ...