Skip to content

Implementation of the JSON API 1.0 specification for GLib

License

Notifications You must be signed in to change notification settings

major-lab/json-api-glib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 

Repository files navigation

JSON-API-GLib

Implementation of the JSON API 1.0 specification for GLib.

The provided classes consist of serializable GLib.Object definitions producing conformant JSON API payloads. It is designed as an extension to JSON-GLib by sharing a common root namespace and generating Json.Node objects.

If you are using Valum, the following sample should give you a good idea of how to build an app:

using Json;
using Valum;

public class User : GLib.Object {
    public string id { get; construct set; }
    public User.from_id (string id)
    {
        GLib.Object (id: id);
    }
}

app.use (accept ("application/vnd.api+json"));

app.get ("/users/<int:id>", (req, res, next, ctx) => {
    var id = ctx["id"].get_string ();

    var payload = new ResourcePayload (new Json.Api.Resource (id,
                                       "user",
                                       Json.gobject_serialize (new User.from_id (id)).get_object ()),
                                       new PayloadLinks (new Link ("/users/%s".printf (id))));

    size_t length;
    return res.expand_utf8 (Json.gobject_to_data (payload, out length));
});

Usage

Only the following classes should be serialized into and unserialized from payloads using Json.gobject_serialize and Json.gobject_unserialize:

  • Payload to produce errors or jsonapi
  • ResourcePayload
  • ResourcesPayload

Links also come in various flavours: the actual class constructor will hint on what kind of Links is expected.

For attributes and meta objects, one can directly use a Json.Object instance.

About

Implementation of the JSON API 1.0 specification for GLib

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published