Suprasti skirtumą tarp POST ir PUT HTTP

Suprasti skirtumą tarp POST ir PUT HTTP
Suprasti skirtumą tarp POST ir PUT HTTP

Įvadas į HTTP metodus

Interneto kūrimo pasaulyje labai svarbu suprasti skirtingų HTTP metodų niuansus. Du dažniausiai naudojami metodai, POST ir PUT, dažnai sukelia painiavą dėl savo panašumų ir skirtumų kuriant ir atnaujinant išteklius.

Pagal RFC 2616, POST pirmiausia naudojamas kuriant naują išteklį, o PUT gali sukurti arba pakeisti esamą šaltinį. Šis straipsnis išsamiai išnagrinės šiuos metodus ir padės išsiaiškinti, kuris iš jų turėtų būti naudojamas kuriant išteklius.

komandą apibūdinimas
@app.route('/resource', methods=['POST']) Apibrėžia maršrutą „Flask“, skirtą POST užklausoms, kad būtų sukurtas išteklius, apdoroti.
request.json Ištraukia JSON duomenis iš užklausos turinio kolboje.
resources[resource_id] = data Išsaugo arba atnaujina išteklius išteklių žodyne „Flask“.
app.use(express.json()) Įgalinamas „Express“ gaunamų užklausų JSON analizavimas.
app.post('/resource', (req, res) =>app.post('/resource', (req, res) => { ... }) Apibrėžia „Express“ maršrutą, skirtą apdoroti POST užklausas, kad būtų sukurtas šaltinis.
app.put('/resource/:id', (req, res) =>app.put('/resource/:id', (req, res) => { ... }) Apibrėžia „Express“ maršrutą, skirtą PUT užklausoms atnaujinti arba sukurti išteklius.

HTTP metodų diegimas žiniatinklio programose

Pateikti scenarijai parodo, kaip juos įgyvendinti POST ir PUT metodai žiniatinklio programose, naudojant Flask ir Express sistemas. Kolbos pavyzdyje, @app.route('/resource', methods=['POST']) dekoratorius naudojamas POST užklausų apdorojimo maršrutui apibrėžti. Kai pateikiama POST užklausa, request.json komanda ištraukia JSON duomenis iš užklausos turinio. Jei ištekliaus ID jau yra, jis pateikia klaidą. Kitu atveju jis išsaugo naujus išteklius resources žodynas. PUT užklausoms @app.route('/resource/<int:resource_id>', methods=['PUT']) dekoratorius naudojamas ištekliui atnaujinti arba sukurti, užtikrinant, kad duomenys būtų saugomi nurodytu šaltinio ID.

Node.js ir Express pavyzdyje serveris nustatytas analizuoti JSON duomenis naudojant app.use(express.json()). Maršrutas app.post('/resource', (req, res) => { ... }) apdoroja POST užklausas, patikrindama, ar išteklius jau egzistuoja, ir išsaugodamas jį, jei jo nėra. The app.put('/resource/:id', (req, res) => { ... }) maršrutas apdoroja PUT užklausas atnaujindamas arba kurdamas išteklius pagal pateiktą ID. Abu scenarijai efektyviai iliustruoja, kaip POST ir PUT metodai gali būti naudojami išteklių kūrimui ir naujinimams valdyti žiniatinklio programose, pabrėžiant kiekvieno HTTP metodo skirtumus ir tinkamus naudojimo atvejus.

Kolbos naudojimas POST ir PUT metodams įgyvendinti

Python su Flask Framework

from flask import Flask, request, jsonify
app = Flask(__name__)
resources = {}
@app.route('/resource', methods=['POST'])
def create_resource():
    data = request.json
    resource_id = data.get('id')
    if resource_id in resources:
        return jsonify({'error': 'Resource already exists'}), 400
    resources[resource_id] = data
    return jsonify(data), 201
@app.route('/resource/<int:resource_id>', methods=['PUT'])
def update_or_create_resource(resource_id):
    data = request.json
    resources[resource_id] = data
    return jsonify(data), 200
if __name__ == '__main__':
    app.run(debug=True)

RESTful API su Node.js ir Express

JavaScript su Node.js ir Express Framework

const express = require('express');
const app = express();
app.use(express.json());
let resources = {}
app.post('/resource', (req, res) => {
    const data = req.body;
    const resourceId = data.id;
    if (resources[resourceId]) {
        return res.status(400).json({ error: 'Resource already exists' });
    }
    resources[resourceId] = data;
    res.status(201).json(data);
});
app.put('/resource/:id', (req, res) => {
    const resourceId = req.params.id;
    resources[resourceId] = req.body;
    res.status(200).json(req.body);
});
app.listen(3000, () => {
    console.log('Server running on port 3000');
});

Pagrindiniai skirtumai tarp POST ir PUT metodų

Kitas svarbus aspektas norint suprasti skirtumą tarp POST ir PUT HTTP yra idempotencija. Idempotiškumas reiškia, kad kelių identiškų užklausų pateikimas turėtų turėti tokį patį poveikį kaip ir vienos užklausos pateikimas. The PUT metodas yra idempotentas, o tai reiškia, kad nesvarbu, kiek kartų siųsite tą patį PUT užklausą, rezultatas bus toks pat: išteklius bus sukurtas arba atnaujintas į tą pačią būseną. Tai labai svarbu norint užtikrinti nuspėjamą ir nuoseklų RESTful paslaugų elgesį.

Priešingai, POST metodas nėra idempotentas. Keli identiški POST užklausos gali sukurti kelis išteklius su skirtingais URI. Šis neidempotiškumas yra naudingas, kai norima sukurti kelis skirtingus išteklius, pvz., pateikti kelis formos įrašus. Šių skirtumų supratimas padeda nuspręsti, kurį metodą naudoti, atsižvelgiant į reikalaujamą jūsų programos elgseną, užtikrinant, kad ji atitiktų REST principus ir veiktų taip, kaip tikėtasi.

Dažnai užduodami klausimai apie POST ir PUT metodus

  1. Koks yra pagrindinis POST metodo tikslas?
  2. Pagrindinis tikslas POST metodas yra sukurti naują šaltinį kaip nurodyto URI pavaldinį.
  3. Kuo PUT metodas skiriasi išteklių valdymo požiūriu?
  4. The PUT metodas naudojamas norint sukurti arba pakeisti išteklius nurodytame URI.
  5. Ar PUT metodas yra idempotentas?
  6. Taip, PUT metodas yra idempotentas, tai reiškia, kad kelios identiškos užklausos turės tokį patį poveikį kaip ir viena užklausa.
  7. Kodėl POST metodas laikomas ne

    Paskutinės mintys apie POST ir PUT

    Apibendrinant galima pasakyti, kad tiek POST, tiek PUT metodai atlieka skirtingus HTTP operacijų tikslus. POST idealiai tinka kurti naujus išteklius nenurodant jų URI, todėl jis yra universalus, norint pridėti kelis įrašus. Kita vertus, PUT tinka kurti arba atnaujinti išteklius konkrečiame URI, užtikrinant idempotenciją. Norint įdiegti veiksmingas ir efektyvias RESTful API, būtina suprasti šiuos skirtumus. Tinkamai naudodami kiekvieną metodą, kūrėjai gali užtikrinti, kad jų programos nuosekliai ir nuspėjamai tvarkytų išteklių kūrimą ir atnaujinimus.