Reactive approach/types in Micronaut for RESTful APIs
I'm not quite clear about these reactive types when dealing with RESTful APIs.
My understanding is that non-reactive request/responses are made of either simple POJO types or the String
type. On the other hand, reactive request/responses –for instance, if using RxJava 2.x
- are made of Simple<T>
or Flowable<T>
.
But then how to approach the reactive model/way when using the HttpRequest<T>
/ HttpResponse<T>
"wrapper" types? I've always like to express the requests/responses with those and not any other type(s) because there are plenty of times one might need to express different HTTP responses types (among other things), for instance:
@Get(value = "/{id}", produces = [MediaType.APPLICATION_JSON])
fun getById(id: String): HttpResponse<Issue> {
//logger.info { "${request.method} ${request.path}" }
return service.findById(UUID.fromString(id))
.map { HttpResponse.ok(it) }
.orElseGet { HttpResponse.notFound() }
}
So my questions are:
- What would be the correct way to implement a reactive RESTful API in Micronaut using the
HttpRequest<T>
/HttpResponse<T>
"wrapper" types? - Is there a way to verify any difference(s) when using the non-reactive approach and the reactive one?
java reactive-programming micronaut
add a comment |
I'm not quite clear about these reactive types when dealing with RESTful APIs.
My understanding is that non-reactive request/responses are made of either simple POJO types or the String
type. On the other hand, reactive request/responses –for instance, if using RxJava 2.x
- are made of Simple<T>
or Flowable<T>
.
But then how to approach the reactive model/way when using the HttpRequest<T>
/ HttpResponse<T>
"wrapper" types? I've always like to express the requests/responses with those and not any other type(s) because there are plenty of times one might need to express different HTTP responses types (among other things), for instance:
@Get(value = "/{id}", produces = [MediaType.APPLICATION_JSON])
fun getById(id: String): HttpResponse<Issue> {
//logger.info { "${request.method} ${request.path}" }
return service.findById(UUID.fromString(id))
.map { HttpResponse.ok(it) }
.orElseGet { HttpResponse.notFound() }
}
So my questions are:
- What would be the correct way to implement a reactive RESTful API in Micronaut using the
HttpRequest<T>
/HttpResponse<T>
"wrapper" types? - Is there a way to verify any difference(s) when using the non-reactive approach and the reactive one?
java reactive-programming micronaut
You have asked 2 fundamentally separate questions. You should probably break those into separate SO posts.
– Jeff Scott Brown
Jan 2 at 16:27
add a comment |
I'm not quite clear about these reactive types when dealing with RESTful APIs.
My understanding is that non-reactive request/responses are made of either simple POJO types or the String
type. On the other hand, reactive request/responses –for instance, if using RxJava 2.x
- are made of Simple<T>
or Flowable<T>
.
But then how to approach the reactive model/way when using the HttpRequest<T>
/ HttpResponse<T>
"wrapper" types? I've always like to express the requests/responses with those and not any other type(s) because there are plenty of times one might need to express different HTTP responses types (among other things), for instance:
@Get(value = "/{id}", produces = [MediaType.APPLICATION_JSON])
fun getById(id: String): HttpResponse<Issue> {
//logger.info { "${request.method} ${request.path}" }
return service.findById(UUID.fromString(id))
.map { HttpResponse.ok(it) }
.orElseGet { HttpResponse.notFound() }
}
So my questions are:
- What would be the correct way to implement a reactive RESTful API in Micronaut using the
HttpRequest<T>
/HttpResponse<T>
"wrapper" types? - Is there a way to verify any difference(s) when using the non-reactive approach and the reactive one?
java reactive-programming micronaut
I'm not quite clear about these reactive types when dealing with RESTful APIs.
My understanding is that non-reactive request/responses are made of either simple POJO types or the String
type. On the other hand, reactive request/responses –for instance, if using RxJava 2.x
- are made of Simple<T>
or Flowable<T>
.
But then how to approach the reactive model/way when using the HttpRequest<T>
/ HttpResponse<T>
"wrapper" types? I've always like to express the requests/responses with those and not any other type(s) because there are plenty of times one might need to express different HTTP responses types (among other things), for instance:
@Get(value = "/{id}", produces = [MediaType.APPLICATION_JSON])
fun getById(id: String): HttpResponse<Issue> {
//logger.info { "${request.method} ${request.path}" }
return service.findById(UUID.fromString(id))
.map { HttpResponse.ok(it) }
.orElseGet { HttpResponse.notFound() }
}
So my questions are:
- What would be the correct way to implement a reactive RESTful API in Micronaut using the
HttpRequest<T>
/HttpResponse<T>
"wrapper" types? - Is there a way to verify any difference(s) when using the non-reactive approach and the reactive one?
java reactive-programming micronaut
java reactive-programming micronaut
asked Jan 2 at 1:09
x80486x80486
3,16921442
3,16921442
You have asked 2 fundamentally separate questions. You should probably break those into separate SO posts.
– Jeff Scott Brown
Jan 2 at 16:27
add a comment |
You have asked 2 fundamentally separate questions. You should probably break those into separate SO posts.
– Jeff Scott Brown
Jan 2 at 16:27
You have asked 2 fundamentally separate questions. You should probably break those into separate SO posts.
– Jeff Scott Brown
Jan 2 at 16:27
You have asked 2 fundamentally separate questions. You should probably break those into separate SO posts.
– Jeff Scott Brown
Jan 2 at 16:27
add a comment |
1 Answer
1
active
oldest
votes
You can return something like Flowable<HttpResponse<T>>
.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54000196%2freactive-approach-types-in-micronaut-for-restful-apis%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can return something like Flowable<HttpResponse<T>>
.
add a comment |
You can return something like Flowable<HttpResponse<T>>
.
add a comment |
You can return something like Flowable<HttpResponse<T>>
.
You can return something like Flowable<HttpResponse<T>>
.
answered Jan 2 at 16:26
Jeff Scott BrownJeff Scott Brown
15.3k11831
15.3k11831
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54000196%2freactive-approach-types-in-micronaut-for-restful-apis%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
You have asked 2 fundamentally separate questions. You should probably break those into separate SO posts.
– Jeff Scott Brown
Jan 2 at 16:27