Das Ziel ist es ein REST – Interface zu implementieren, Bei den möglichen Frameworks stehen .NET(C#) oder Java zur Auswahl. Dabei sind die folgenden Anforderungen zu erfüllen:
- Es soll möglich sein, Personen und ihre Lieblingsfarbe über das Interface zu verwalten
- Die Daten sollen aus einer CSV Datei lesbar sein, ohne dass die CSV angepasst werden muss
- Alle Personen mit exakten Lieblingsfarben können über das Interface identifiziert werden
Einige Beispieldatensätze finden sich in sample-input.csv
. Die Zahlen der ersten Spalte sollen den folgenden Farben entsprechen:
ID | Farbe |
---|---|
1 | blau |
2 | grün |
3 | violett |
4 | rot |
5 | gelb |
6 | türkis |
7 | weiß |
Das Ausgabeformat der Daten ist als application/json
festgelegt. Die Schnittstelle soll folgende Endpunkte anbieten:
GET /persons
[{
"id" : 1,
"name" : "Hans",
"lastname": "Müller",
"zipcode" : "67742",
"city" : "Lauterecken",
"color" : "blau"
},{
"id" : 2,
...
}]
GET /persons/{id}
Hinweis: als ID kann hier die Zeilennummer verwendet werden.
{
"id" : 1,
"name" : "Hans",
"lastname": "Müller",
"zipcode" : "67742",
"city" : "Lauterecken",
"color" : "blau"
}
GET /persons/color/{color}
[{
"id" : 1,
"name" : "Hans",
"lastname": "Müller",
"zipcode" : "67742",
"city" : "Lauterecken",
"color" : "blau"
},{
"id" : 2,
...
}]
- Die CSV Datei wurde eingelesen, und wird programmintern durch eine dem Schema entsprechende Modellklasse repräsentiert.
- Der Zugriff auf die Datensätze so abstrahiert, dass eine andere Datenquelle angebunden werden kann, ohne den Aufruf anpassen zu müssen.
- Die oben beschriebene REST-Schnittstelle wurde implementiert und liefert die korrekten Antworten.
- Der Zugriff auf die Datensätze, bzw. auf die zugreifende Klasse wird über Dependency Injection gehandhabt.
- Die REST-Schnittstelle ist mit Unit-Tests getestet.
- Die
sample-input.csv
wurde nicht verändert
- Implementierung als MSBuild Projekt für kontinuierliche Integration auf TFS (C#/.NET) oder als Maven/Gradle Projekt (Java)
- Implementieren Sie eine zusätzliche Methode POST/ Personen, die eine zusätzliche Aufzeichnung zur Datenquelle hinzufügen
- Anbindung einer zweiten Datenquelle (z.B. Datenbank via Entity Framework)
Denk an deine zukünftigen Kollegen, und mach es ihnen nicht zu einfach, indem du deine Lösung öffentlich zur Schau stellst. Danke!
You are to implement a RESTful web interface. The choice of framework and stack is yours between .NET (C#) or Java. It has to fulfull the following criteria:
- You should be able to manage persons and their favourite colour using the interface
- The application should be able to read the date from the CSV source, without modifying the source file
- You can identify people with a common favourite colour using the interface
A set of sample data is contained within sample-input.csv
. The number in the first column represents one of the following colours:
ID | Farbe |
---|---|
1 | blau |
2 | grün |
3 | violett |
4 | rot |
5 | gelb |
6 | türkis |
7 | weiß |
the return content type is application/json
. The interface should offer the following endpoints:
GET /persons
[{
"id" : 1,
"name" : "Hans",
"lastname": "Müller",
"zipcode" : "67742",
"city" : "Lauterecken",
"color" : "blau"
},{
"id" : 2,
...
}]
GET /persons/{id}
HINT: use the csv line number as your ID.
{
"id" : 1,
"name" : "Hans",
"lastname": "Müller",
"zipcode" : "67742",
"city" : "Lauterecken",
"color" : "blau"
}
GET /persons/color/{color}
[{
"id" : 1,
"name" : "Hans",
"lastname": "Müller",
"zipcode" : "67742",
"city" : "Lauterecken",
"color" : "blau"
},{
"id" : 2,
...
}]
- The csv file is read and represented internally by a suitable model class.
- File access is done with an interface, so the implementation can be easily replaced for other data sources.
- The REST interface is implemented according to the above specifications.
- Data access is done using a dependency injection mechanism
- Unit tests for the REST interface are available.
sample-input.csv
has not been changed.
- implement the project with MSBuild in mind for CI using TFS/DevOps when using .NET, or as a Maven/Gradle project in Java
- Implement an additional POST /persons to add new people to the dataset
- Add a secondary data source (e.g. database via EF or JPA)
Think about your potential future colleagues, and do not make it too easy for them by posting your solution publicly. Thank you!