Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      Stop writing tests: Automate fully with Generative AI

      August 19, 2025

      Opsera’s Codeglide.ai lets developers easily turn legacy APIs into MCP servers

      August 19, 2025

      Black Duck Security GitHub App, NuGet MCP Server preview, and more – Daily News Digest

      August 19, 2025

      10 Ways Node.js Development Boosts AI & Real-Time Data (2025-2026 Edition)

      August 18, 2025

      This new Coros watch has 3 weeks of battery life and tracks way more – even fly fishing

      August 20, 2025

      5 ways automation can speed up your daily workflow – and implementation is easy

      August 20, 2025

      This new C-suite role is more important than ever in the AI era – here’s why

      August 20, 2025

      iPhone users may finally be able to send encrypted texts to Android friends with iOS 26

      August 20, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      Creating Dynamic Real-Time Features with Laravel Broadcasting

      August 20, 2025
      Recent

      Creating Dynamic Real-Time Features with Laravel Broadcasting

      August 20, 2025

      Understanding Tailwind CSS Safelist: Keep Your Dynamic Classes Safe!

      August 19, 2025

      Sitecore’s Content SDK: Everything You Need to Know

      August 19, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      Why GNOME Replaced Eye of GNOME with Loupe as the Default Image Viewer

      August 19, 2025
      Recent

      Why GNOME Replaced Eye of GNOME with Loupe as the Default Image Viewer

      August 19, 2025

      Microsoft admits it broke “Reset this PC” in Windows 11 23H2 KB5063875, Windows 10 KB5063709

      August 19, 2025

      How to Fix “EA AntiCheat Has Detected an Incompatible Driver” on Windows 11?

      August 19, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»News & Updates»CodeSOD: I Am Not 200

    CodeSOD: I Am Not 200

    August 19, 2025

    In theory, HTTP status codes should be easy to work with. In the 100s? You’re doing some weird stuff and breaking up large requests into multiple sub-requests. 200s? It’s all good. 300s? Look over there. 400s? What the hell are you trying to do? 500s? What the hell is the server trying to do?

    This doesn’t mean people don’t endlessly find ways to make it hard. LinkedIn, for example, apparently likes to send 999s if you try and view a page without being logged in. Shopify has invented a few. Apache has added a 218 “This is Fine“. And then there’s WebDAV, which not only adds new status codes, but adds a whole bunch of new verbs to HTTP requests.

    Francesco D sends us a “clever” attempt at handling status codes.

        try {
          HttpRequest.Builder localVarRequestBuilder = {{operationId}}RequestBuilder({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}headers);
          return memberVarHttpClient.sendAsync(
              localVarRequestBuilder.build(),
              HttpResponse.BodyHandlers.ofString()).thenComposeAsync(localVarResponse -> {
                if (localVarResponse.statusCode()/ 100 != 2) {
                  return CompletableFuture.failedFuture(getApiException("{{operationId}}", localVarResponse));
                }
                {{#returnType}}
                try {
                  String responseBody = localVarResponse.body();
                  return CompletableFuture.completedFuture(
                      responseBody == null || responseBody.isBlank() ? null : memberVarObjectMapper.readValue(responseBody, new TypeReference<{{{returnType}}}>() {})
                  );
                } catch (IOException e) {
                  return CompletableFuture.failedFuture(new ApiException(e));
                }
                {{/returnType}}
                {{^returnType}}
                return CompletableFuture.completedFuture(null);
                {{/returnType}}
          });
        }
    

    Okay, before we get to the status code nonsense, I first have to whine about this templating language. I’m generally of the mind that generated code is a sign of bad abstractions, especially if we’re talking about using a text templating engine, like this. I’m fine with hygienic macros, and even C++’s templating system for code generation, because they exist within the language. But fine, that’s just my “ok boomer” opinion, so let’s get into the real meat of it, which is this line:

    localVarResponse.statusCode()/ 100 != 2
    

    “Hey,” some developer said, “since success is in the 200 range, I’ll just divide by 100, and check if it’s a 2, helpfully truncating the details.” Which is fine and good, except neither 100s nor 300s represent a true error, especially because if the local client is doing caching, a 304 tells us that we can used the cached version.

    For Francesco, treating 300s as an error created a slew of failed requests which shouldn’t have failed. It wasn’t too difficult to detect- they were at least logging the entire response- but it was frustrating, if only because it seems like someone was more interested in being clever with math than actually writing good software.

    [Advertisement]
    Keep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.Learn more.

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleSentry Adds Logs Support for Laravel Apps
    Next Article nbpreview – terminal viewer for Jupyter notebooks

    Related Posts

    News & Updates

    This new Coros watch has 3 weeks of battery life and tracks way more – even fly fishing

    August 20, 2025
    News & Updates

    5 ways automation can speed up your daily workflow – and implementation is easy

    August 20, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    Cisco fixes two critical make-me-root bugs on Identity Services Engine components

    Security

    OpenAI wants ChatGPT to be your ‘super assistant’ – what that means

    News & Updates

    I’ve tried lots of AI image generators, and Nvidia and MIT’s is the one to beat for speed

    News & Updates

    How AI companies are secretly collecting training data from the web (and why it matters)

    News & Updates

    Highlights

    Linux

    GPD MicroPC 2: Souped-Up Successor to Original Pocket PC

    July 4, 2025

    Everything receives a sequel eventually, and so it is so for the GPD MicroPC. A…

    Oblivion Remastered and Metal Gear Solid Delta co-developer Virtuos faces layoffs — with 270 workers cut

    July 17, 2025

    How to turn Open Source into a Job with Nick Taylor [Podcast #181]

    July 25, 2025

    NVIDIA RTX 5060 Ti review roundup: A “decent enough product” that launched into a chaotic tech market

    April 16, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.