Veebiteenused

API

API on sisuliselt tarkvararakenduste vahendaja, mis võimaldab erinevatel süsteemidel omavahel suhelda. API kaudu saavad veebisaidid või rakendused vahetada andmeid teiste sisemiste või väliste süsteemidega.

REST API

REST API on arhitektuuristiil, mis määratleb veebiteenuste loomisel kasutatavate piirangute komplekti.

SOAP

SOAP on arvutivõrkudes kasutatav protokoll, millega veebiteenused vahetavad omavahel struktuurseid andmeid.

WSDL & UDDI

WSDL on XML-vorming, mis kirjeldab veebiteenust.

UDDI on teenuste leidmise protokoll, nagu veebiteenuste “kollased lehed”.

RESTful

Enamik API-sid maailmas on RESTful, mis tähendab, et nad järgivad suures osas teatud reeglite või õieti piirangute kogumit, mida tuntakse kui Representational State Transfer ehk REST, mis on alates 2000. aastate algusest olnud de facto standard API-de arendamisel. De facto sellepärast, et ametlikult ei ole REST standard, vaid Roy Fieldingu poolt doktorikraadi väitekirjas kirja pandud parimate praktikate kirjeldus, millele on aegade jooksul lisandunud ka teisi häid tavasid.

Harjutus 1

1. Paigalda Node.js
5. Loo töölauale kaust rest–api 
3. Käivita koodiredaktor (nt VS Code, WebStorm vms) ja ava see kaust projektina
4. Loo kausta fail index.js järgneva sisuga

Me teeme rakenduse, kus saame lisada ja saada andmeid massiivist, kus on salvestatud „Widgets“.

Kood:

const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors());        // Avoid CORS errors in browsers
app.use(express.json()) // Populate req.body

const widgets = [
    { id: 1, name: "Cizzbor", price: 29.99 },
    { id: 2, name: "Woowo", price: 26.99 },
    { id: 3, name: "Crazlinger", price: 59.99 },
]

app.get('/widgets', (<em>req</em>, <em>res</em>) => {
    res.send(widgets)
})

app.get('/widgets/:id', (<em>req</em>, <em>res</em>) => {
    if (typeof widgets[req.params.id - 1] === 'undefined') {
        return res.status(404).send({ error: "Widget not found" })
    }
    res.send(widgets[req.params.id - 1])
})

app.post('/widgets', (<em>req</em>, <em>res</em>) => {
    if (!req.body.name || !req.body.price) {
        return res.status(400).send({ error: 'One or all params are missing' })
    }
    let newWidget = {
        id: widgets.length + 1,
        price: req.body.price,
        name: req.body.name
    }
    widgets.push(newWidget)
    res.status(201).location('localhost:8080/widgets/' + (widgets.length - 1)).send(
        newWidget
    )
})

app.listen(8080, () => {
    console.log(`API up at: http://localhost:8080`)
})