Code Monkey home page Code Monkey logo

Comments (6)

jakoss avatar jakoss commented on May 26, 2024 1

From my perspective 204 should be always by design. So when i want to handle 204 i just don't require any response type (in Sandwich that could be represented by a Unit type maybe? (I'm not 100% sure about that, but maybe Sandwich could allow 204 as a success only if return type is Unit? Is that even possible in kotlin, not sure here :) ).

Or maybe different response handling type, something like NoContentApiResponse instead of ApiResponse. That seems to me like fine explicit solution to that. That way programmer always have to explicitly declare that they do not expect body.

from sandwich.

skydoves avatar skydoves commented on May 26, 2024

Hi, @jakoss
Your issue is very worth agenda to discuss in this APIs.
The data property in the ApiResponse.Success will be null if the response has been succeeded, but the body data is empty (e.g., 204-No Content). So I designed following the Retrofit's interfaces at the beginning.

I was thought of implementing another expression for handling the empty body response like onComplete and changing the type of the data to non-nullable. But it was a little questionable whether it is efficient to create a new expression for handling empty body responses in another way because we can handle both cases in the onSuccess expression.

If you have an idea for handling the empty body cases, I hope to get any feedback for supporting better interfaces! :)

from sandwich.

skydoves avatar skydoves commented on May 26, 2024

You're right. :) And moreover, we don't require to handle the data when the 204 response case, which means also we don't need to check the nullability. (For the 204 response case, we don't need to access the data property at all).

I'm considering changing the type of the data property to non-null, and It will throw NoContentException when trying to access the body is null. Also, I'm considering implementing onComplete scope function to handle which has no response receivers for processing only the no-content case.

Thanks for sharing your feedback :)

from sandwich.

jakoss avatar jakoss commented on May 26, 2024

Throwing on body access while in 204 seems fine. Like I said, it should always be by design anyway 😁

from sandwich.

skydoves avatar skydoves commented on May 26, 2024

@jakoss
This feature has been included in the 1.2.0-SNAPSHOT and it will be released on the next version.
Thank you for your discussion and issue! 👍

from sandwich.

skydoves avatar skydoves commented on May 26, 2024

Released a new stable 1.2.0. 🎉

from sandwich.

Related Issues (20)

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.