hoewerkt/articles/opzoek/archiefkast.md

61 lines
4.8 KiB
Markdown
Raw Normal View History

# Opzoek naar je naam
2015-08-27 14:42:32 +02:00
---
## De Werkmanrooster archiefkast
Nadat je computer Werkmanrooster.nl heeft gevonden via het [`DNS` telefoonboek](/intypen), maakt hij verbinding met de website. Je ziet de hoofdpagina van de website en typt je naam in. Je drukt op enter en de je rooster laadt in minder dan een seconde.
2015-11-19 22:08:15 +01:00
In die ene seconden zijn heel wat processen aan de gang om ervoor te zorgen dat jij je rooster te zien krijgt. We gaan ons nu bezighouden met hoe Werkmanrooster bijhoudt wie welk rooster heeft. Je hebt vast wel gehoord van een `database`, in een film of je favoriete serie. De nerd met een bril zit achter de computer terwijl hij iets met een `database` doet. Maar wat is een database eigenlijk? Een `database` is een groot digitaal archief waar informatie in zit. Laten we kijken naar een voorbeeld met een archiefkast.
2015-11-19 22:08:15 +01:00
Werkmanrooster beschikt over een grote archiefkast van leerlingen, docenten, klassen en lokalen. Als je op enter drukt gaat er een secretaresse bezig met het vergelijken van de naam die je hebt ingetypt en de namen in de archiefkast. Ze haalt alle namen er uit die overeenkomen met wat je hebt ingetypt. Aan het einde van de zoektocht heeft ze een bestand gevonden van een persoon waarnaar jij vroeg. Een bestand uit die archiefkast ziet er zo uit:
2015-08-28 15:59:55 +02:00
```json
Naam: Bram van der Veen
Leerlingnummer: 16374
Klas: Atheneum
2015-08-28 15:59:55 +02:00
Voornaam: Bram
Achternaam: van der Veen
Soort: Leerling
Rooster: roosters5.gepro-osi.nl/roosters/rooster.php?school=934&type=Leerlingrooster&afdeling=l_atheneum 6&leerling=16374
```
2016-01-13 23:09:54 +01:00
Wat de secretaresse doet is elk bestand langs gaan en dit vergelijken met jouw zoekopdracht. Als jij vraagt naar "Bram" dan zal ze alle Brammen pakken. Vraag jij bijvoorbeeld naar "Atheneum 6" dan zal zij alle bestanden pakken die uit Atheneum 6 komen. Mocht ze alleen maar één bestand vinden bij de zoekopdracht, dan stuurt ze het gevonden bestand naar haar collega die het rooster zal op zoeken en uitprinten.
2015-08-28 15:59:55 +02:00
---
2015-11-19 22:08:15 +01:00
## Zoeken naar een naald in een naaldberg
2016-01-13 23:09:54 +01:00
Bij het intypen van `Bram van der Veen` zal rooster.io [de informatie](http://werkmanrooster.nl/api/search?name=Bram van der Veen) vinden die daar bij hoort. Je ziet een duidelijk overeenkomst tussen het databestand hieronder weergegeven en die van de archiefkast. Het verschil zijn wat vreemde tekens in en rond de informatie. Wat betekent dit allemaal?
2015-11-19 22:08:15 +01:00
```javascript
//In dit voorbeeld heeft naam_voor_de_data, de waarde "data".
{
//De ":" wil zeggen dat de een waarde word gebonden aan een variabele
//in dit geval "data" aan de "naam_voor_de_data" variabele.
"naam_voor_de_data": "data"
}
```
2016-01-13 23:09:54 +01:00
Wat we hier zien is ook een soort van `code`. Het is misschien niet direct een manier van vertellen wat een computer moet doen, maar een manier waarop code informatie kan vasthouden en organiseren. De structuur (of syntax) is vergelijkbaar met die van `Javascript`, dat klopt ook. Dit is namelijk een dataobject genoteerd in zogenaamd "**J**ava**s**cript **O**bject **N**otation", `JSON` in het kort. Eigenlijk staat er precies hetzelfde als in het bestand uit de archiefkast, maar er zijn wat tekens aan toegevoegd zodat de computer het kan lezen.
2016-01-02 13:24:45 +01:00
2016-01-13 23:09:54 +01:00
Rooster.io werkt hier net zoals de secretaresse. Hij gaat alle bestanden langs om te kijken of jouw zoekopdracht overeenkomt met een van de vele bestanden in de database. Zo'n bestand ziet er zo uit:
2015-11-19 22:08:15 +01:00
```javascript
//Een dataset voor de zoekopdracht "Bram van der Veen"
{
"id": "16374", //Leerlingnummer
"group": "A6A", //Groep waaraan de leerling behoort
"username": "16374bram", //De geschatte gebruikersnaam van de leerling
"name": "Bram van der Veen", //De hele naam van de leerling
"first_name": "Bram", //De voornaam van de leerling
"last_name": "van der Veen", //De achternaam van de leerling
2016-01-13 23:09:54 +01:00
"studentcategory": "l_atheneum 6", //Een variabele wat nodig is voor het op zoeken van het rooster.
2015-11-19 22:08:15 +01:00
"type": "leerling", //Een variable die bepaald of deze dataset een leerling is of iets anders.
"_id": "Mc5vtoIrhMM8e2dN",
//De link naar het rooster van de leerling.
"url": "roosters5.gepro-osi.nl/?school=934&type=Leerlingrooster&afdeling=l_atheneum 6&leerling=16374"
}
```
2016-01-13 23:09:54 +01:00
Het bestand is eigenlijk een groep variabelen die het systeem langs gaat. In dit geval komt `Bram van der Veen` overeen met de waarde van het variabele `name`. Maar hetzelfde geld als ik bijvoorbeeld alleen `Bram` of `van der Veen` intyp, het systeem zal alleen [meerdere ](http://werkmanrooster.nl/api/search?name=Bram)[mensen](http://werkmanrooster.nl/api/search?name=van der Veen) vinden met dezelfde waardes.
Als rooster.io meerdere mensen vindt voor dezelfde zoekopdracht dan maakt hij een lijst zodat de gebruiker kan kiezen uit welk van de mensen hij of zij het rooster wil zien. Als er maar één persoon gevonden wordt dan gaat rooster.io verder met de volgende stap, het rooster verkrijgen en verwerken.
2015-11-19 22:08:15 +01:00
[Volgende >>](/verkrijgen)