Repositorien

Wenn Sie das Kapitel Projekte gelesen haben, dann haben Sie eventuell schon eine gewisse Vorstellung davon, wie Sie Repositorien anlegen können. So, wie bei Projekten auch, reicht dafür derzeit ebenfalls lediglich ein Name und ein optionaler Beschreibungstext.

Repositorien anlegen

Um ein Repositorium anlegen zu können, senden Sie, wie oben bereits erwähnt, einen Namen und einen optionalen Beschreibungstext. Sie müssen bei einem Repositorium zusätzlich das Projekt angeben, welches Sie dem Repositorium zuordnen möchten. Sie können dafür entweder eine dereferenzierbare IRI angeben oder Sie benutzen Serialisierungsgruppen und fügen das Projekt als eingebette Ressource hinzu.

Wenn Sie das project-Attribut weglassen, antwortet der API-Server mit einer entsprechenden Fehlermeldung:

{
    "type": "https://tools.ietf.org/html/rfc2616#section-10",
    "title": "An error occurred",
    "detail": "project: This value should not be blank.",
    "violations": [
        {
            "propertyPath": "project",
            "message": "This value should not be blank."
        }
    ]
}

Wir legen ein Repositorium über eine dereferenzierbare IRI an:

curl -X POST "https://localhost/aaas/project/repositories" ...
{
  "name": "Blog",
  "description": "Blog repository.",
  "project" : "/aaas/projects/1"
}

Der API-Server antwortet mit dem angelegten Repositorium:

{
    "id": 1,
    "name": "Blog",
    "description": "Blog repository.",
    "project": "/aaas/projects/1",
    "services": [
    ]
}

Repositorien bearbeiten

Beim Bearbeiten eines Repositoriums gehen Sie gleichermaßen vor, wie beim Bearbeiten eines API-Projekte. Es ändert sich lediglich der API-Endpunkt:

curl -X PUT "https://localhost/aaas/project/repositories/1" ...
{
    "name": "Edited Blog",
    "description": "My edited Blog repository"
}
{
    "id": 1,
    "name": "Edited Blog",
    "description": "My edited Blog repository",
    "project": "/aaas/projects/1",
    "services": [
    ]
}

Repositorien anzeigen

Um eine ungefilterte Ergebnisliste zu erhalten, senden Sie einen HTTP-GET-Request an den entsprechenden Endpoint:

curl -X GET "https://localhost/aaas/project/repositories" ...
[
    {
        "id": 1,
        "name": "Edited Blog",
        "description": "My edited Blog repository",
        "project": "/aaas/projects/1",
        "services": [
            "/aaas/repository/services/1"
        ]
    },
    {
        "id": 2,
        "name": "Blog",
        "description": "Blog repository.",
        "project": "/aaas/projects/2",
        "services": [
            "/aaas/repository/services/2"
        ]
    }
]

Um sich alle Repositorien anzeigen zu lassen, die einem bestimmten API-Projekt zugeordnet sind, verwenden Sie einen entsprechenden Query-Parameter und übergeben den eineindeutigen Schlüssel des entsprechenden Projekts:

curl -X GET "https://localhost/aaas/project/repositories?project=1" ...
[
    {
        "id": 1,
        "name": "Blog",
        "description": "Blog repository."
        "project": "/aaas/projects/1",
        "services": [
        ]
    },
    {
        "id": 2,
        "name": "Shop",
        "description": "Shop repository.",
        "project": "/aaas/projects/1",
        "services": [
        ]
    }
]

Repositorien löschen

Sie senden einen HTTP-DELETE-Request an den entsprechenden API-Endpoint:

curl -X DELETE "https://localhost/aaas/project/repositories/1" ...

Das Repositorium wird gelöscht, wenn es sich in Ihrer Datenbank befindet.

Serialisierungsgruppen

Sie finden im Folgenden eine Übersicht der verwendeten Serialisierungsgruppen von Repositorien:

Gruppe Definition
project Serialisiert/Deserialisiert project-Attribute
service Serialisiert/Deserialisiert service-Attribute

Hinweis

Wie Sie anhand der Tabelle erkennen können, können Sie Projekte über Repositorien deserialisieren. So ist es beispielsweise möglich, ein Repositorium anzulegen und gleichzeitig auch ein zugehöriges Projekt. Objekthierarchisch gesehen, befinden sich Repositorien unterhalb von Projekten. Aus Gründen der Designphilosophie empfehlen wir daher immer den umgekehrten Weg: Legen Sie Projekte samt Repositorien an, aber legen Sie keine Repositorien samt Projekte an.

Deseralisierung von Projekten

Folgendes würde funktionieren, wird von uns aber nicht empfohlen:

curl -X POST https://localhost/aaas/project/repositories?groups[]=project
{
  "name": "Blog",
  "description": "Blog repository.",
  "project" : {
    "name" : "My awesome API project"
  }
}
{
    "id": 3,
    "name": "Blog",
    "description": "Blog repository.",
    "project": {
        "id": 3,
        "name": "My awesome API project",
        "description": null,
        "repositories": [
        ]
    },
    "services": [
    ]
}

Sie sollten Serialisierungsgruppen benutzen, um über- und untergeordnete Objekte zu serialisieren. Deserialisieren sollten Sie immer nur untergeordnete Objekte.

Deseralisierung von Services

So können Sie die Gruppen benutzen, um beispielsweise Repositorien samt Services anzulegen:

curl -X POST https://localhost/aaas/project/repositories?groups[]=service
{
  "name": "Blog",
  "description": "Blog repository.",
  "project" : "/aaas/projects/1",
  "services": [
    {
      "name": "Post",
      "description": "Service holds blog articles."
    },
    {
      "name": "Author",
      "description": "Service holds blog authors."
    }
  ]
}
{
    "id": 4,
    "name": "Blog",
    "description": "Blog repository.",
    "project": "/aaas/projects/1",
    "services": [
        {
            "id": 3,
            "name": "Post",
            "description": "Service holds blog articles.",
            "type": "list",
            "repository": "/aaas/project/repositories/4",
            "fields": [
            ]
        },
        {
            "id": 4,
            "name": "Author",
            "description": "Service holds blog authors.",
            "type": "list",
            "repository": "/aaas/project/repositories/4",
            "fields": [
            ]
        }
    ]
}

Serialisierung von Projekten

Um project- oder service-Attribute zusätzlich serialisieren zu lassen, geben Sie einfach die entsprechenden Serialisierungsgruppen an:

curl -X GET "https://localhost/aaas/project/repositories/4?groups[]=project" ...
{
    "id": 4,
    "name": "Blog",
    "description": "Blog repository.",
    "project": {
        "id": 1,
        "name": "Web Application",
        "description": "This is my Web Application.",
        "repositories": [
            "/aaas/project/repositories/4"
        ]
    },
    "services": [
        "/aaas/repository/services/3",
        "/aaas/repository/services/4"
    ]
}

Serialisierung von Projekten und Services

curl -X GET "https://localhost/aaas/project/repositories/4?groups[]=project&groups[]=service" ...
{
    "id": 4,
    "name": "Blog",
    "description": "Blog repository.",
    "project": {
        "id": 1,
        "name": "Web Application",
        "description": "This is my Web Application.",
        "repositories": [
            "/aaas/project/repositories/4"
        ]
    },
    "services": [
        {
            "id": 3,
            "name": "Post",
            "description": "Service holds blog articles.",
            "type": "list",
            "repository": "/aaas/project/repositories/4",
            "fields": [
            ]
        },
        {
            "id": 4,
            "name": "Author",
            "description": "Service holds blog authors.",
            "type": "list",
            "repository": "/aaas/project/repositories/4",
            "fields": [
            ]
        }
    ]
}