Giter Club home page Giter Club logo

crnk-framework's Introduction

crnk.io - Crank up the development of RESTful applications!

Build Status Gitter License Coverage Status

Bintray release on jcenter
Bintray latest in private repository

What is Crnk?

Crnk is an implementation of the JSON API specification and recommendations in Java to facilitate building RESTful applications. It provides many conventions and building blocks that application can benefit from. This includes features such as sorting, filtering, pagination, requesting complex object graphs, sparse field sets, attaching links to data or atomically execute multiple operations. Further integration with frameworks and libraries such as Spring, CDI, JPA, Bean Validation, Dropwizard, Servlet API, Zipkin and and more ensure that JSON API plays well together with the Java ecosystem. Have a look at www.crnk.io and the documentation for more detailed information.

Release notes can be found in http://www.crnk.io/releases/.

Repository

Crnk Maven artifacts are available from jcenter/bintray: https://bintray.com/crnk-project.

Note that due to reliability issues of MavenCentral we only rarely publish there.

Requirements

Crnk requires Java 1.8 or later and an SLF4J setup for logging.

Example

See https://github.com/crnk-project/crnk-example/

Gradle settings.gradle can look like:

gradle.beforeProject { Project project ->
    project.with {
        buildscript {
            repositories {
                jcenter()
                // maven { url 'https://dl.bintray.com/crnk-project/mavenLatest/' }
            }
        }
        repositories {
            jcenter()
            // maven { url 'https://dl.bintray.com/crnk-project/mavenLatest/' }
        }
    }
}

and the build.gradle:

dependencies {
    implementation platform('io.crnk:crnk-bom:INSERT_VERSION_HERE')
    annotationProcessor platform('io.crnk:crnk-bom:INSERT_VERSION_HERE')

    annotationProcessor 'io.crnk:crnk-gen-java'

    implementation "io.crnk:crnk-setup-spring-boot2"
    implementation "io.crnk:crnk-data-jpa"
    implementation "io.crnk:crnk-data-facet"
    implementation "io.crnk:crnk-format-plain-json"
    implementation "io.crnk:crnk-validation"
    implementation "io.crnk:crnk-home"
    implementation "io.crnk:crnk-ui"
    implementation "io.crnk:crnk-operations"
    implementation "io.crnk:crnk-security"
}

and a basic Java example:

@JsonApiResource(type = "vote")
@Data
public class Vote {

    @JsonApiId
    private UUID id;

    private int stars;

}

public class VoteRepository extends ResourceRepositoryBase<Vote, UUID> {

    public Map<UUID, Vote> votes = new ConcurrentHashMap<>();

    public VoteRepository() {
        super(Vote.class);
    }

    @Override
    public ResourceList<Vote> findAll(QuerySpec querySpec) {
        return querySpec.apply(votes.values());
    }

    @Override
    public <S extends Vote> S save(S entity) {
        votes.put(entity.getId(), entity);
        return null;
    }

    @Override
    public void delete(UUID id) {
        votes.remove(id);
    }
}

or with JPA:

@JsonApiResource(type = "person")
@Entity
@Data
public class PersonEntity {

	@Id
	private UUID id;

	private String name;

	private int year;

	@OneToMany(mappedBy = "movie")
	private List<RoleEntity> roles = new ArrayList<>();

	@Version
	private Integer version;
}

public class PersonRepository extends JpaEntityRepositoryBase<PersonEntity, UUID> {

	public PersonRepository() {
		super(PersonEntity.class);
	}

	@Override
	public PersonEntity save(PersonEntity entity) {
		// add your save logic here
		return super.save(entity);
	}

	@Override
	public PersonEntity create(PersonEntity entity) {
		// add your create logic here
		return super.create(entity);
	}

	@Override
	public void delete(UUID id) {
		// add your save logic here
		super.delete(id);
	}
}

Crnk integrates well with many frameworks. Have a look at the documentation and carefully choose what you need. Don't hesitate to ask for help and suggest improvements!

Licensing

Crnk is licensed under the Apache License, Version 2.0. You can grab a copy of the license at http://www.apache.org/licenses/LICENSE-2.0.

Building from Source

Crnk make use of Gradle for its build. To build the complete project run

gradlew clean build

Note as part of the build a local Node installation is downloaded to build the frontend parts (crnk-ui) of the project.

Links

Endorsements

YourKit

We thank YourKit for supporting open source projects with profiler and monitoring tooling.

crnk-framework's People

Contributors

remmeier avatar macleodbroad-wf avatar vicmosin avatar mohlek avatar dependabot[bot] avatar cgendreau avatar csetera avatar lorenzleutgeb avatar peter-plochan avatar whgibbo avatar gianinbasler avatar giddyhut avatar daniel-deluca avatar jochenreinhardt avatar weaselmetal avatar duncanportelli avatar a-dudko avatar ammar-khan avatar brandonandre avatar sig-crande avatar chklauser avatar juniorhamish avatar pro100proff avatar datagitlies avatar jharmelink avatar jimirocks avatar kokogino avatar lodrantl avatar mask avatar 0ffer avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.