🧑💻 Added joke HTTP status codes
This commit is contained in:
parent
51b6e24e96
commit
872d5babb5
|
@ -0,0 +1,91 @@
|
|||
package http
|
||||
|
||||
// This status code is primary meant to be used in REST API interactions as an
|
||||
// issued warning related to the request itself. Since in regular GET requests
|
||||
// there are no direct ways of telling the client about a potential mistake in
|
||||
// the request without altering the response body, the only way to notify the
|
||||
// client is using a custom HTTP header.
|
||||
//
|
||||
// However, many client-side libraries and applications are silently ignoring
|
||||
// all non-important headers, which would ultimately hide such warning from the
|
||||
// actual client code logic, unless the programmer directly checks the known
|
||||
// header.
|
||||
//
|
||||
// But in cases when the server responds with "267 Questionable But Okay", the
|
||||
// request status code becomes obvious. There are a lot of implementations that
|
||||
// expect the response code to be strictly equal to "200 OK" and thus would
|
||||
// consider the potentially erroneous request as failed indeed, bringing
|
||||
// developers' attention to the underlying problem.
|
||||
//
|
||||
// From the practical point of view, the server may return 267 status code for
|
||||
// GET requests each time it determines that the particular request is not
|
||||
// coming from an official or fully conforming REST client. Small differences in
|
||||
// implementation of client logic might make this client application to stand
|
||||
// out from the behavior patterns of official clients:
|
||||
//
|
||||
// - Absence of a GET parameter that is always sent by official clients – in
|
||||
// cases when the server can tolerate its absence and still fulfil the
|
||||
// request based on other available information
|
||||
// (e.g. "/getPhoto?album_id=421&photo_index=NaN" might fallback to photo_index=0)
|
||||
// - Duplication of a GET parameter or receiving GET parameters in an
|
||||
// unexpected order – in cases where the order of those parameters has a
|
||||
// semantic meaning for this particular API endpoint and the server logic
|
||||
// has valid reasons to specifically check for this
|
||||
// (e.g. "/getPhoto?photo_index=3&album_id=421&photo_index=3")
|
||||
// - Presence of a GET parameter that has a special meaning for other API
|
||||
// endpoints – in cases when this parameter otherwise involves a different
|
||||
// processing on the server that is not required for this particular
|
||||
// endpoint (e.g. "/getPhoto?album_id=421&photo_index=3&user_token=abcdef")
|
||||
// - Presence of a HTTP header that has a special meaning for other API
|
||||
// endpoints and requires a special processing that cannot be applied for
|
||||
// this particular request (e.g. "Authorization: Basic YmFzZTY0")
|
||||
//
|
||||
// This status code should be related only to this particular requests,
|
||||
// indicating a discrepancy in logic that formed it. It should not be used to
|
||||
// indicate a questionable series of requests made by client (e.g. wrong order
|
||||
// of API calls).
|
||||
// Also it is not advisable to use it with POST requests that return an
|
||||
// application-defined data structure, since it is naturally to include any
|
||||
// warnings or hints directly in the POST body.
|
||||
//
|
||||
// Generally, a received "267 Questionable But Okay" status code indicates that
|
||||
// the server warns the client that the request is identified as non-genuine but
|
||||
// otherwise conforming to web standards. It may be silently ignored or
|
||||
// converted to "200 OK" on the client side in case the programmer
|
||||
// deliberatively wants to simplify the code and generalize the interactions
|
||||
// with server API.
|
||||
//
|
||||
// However, its highly advisable to log all 267 responses in fully conforming
|
||||
// client because it indicates a potential bug in request logic. A conforming
|
||||
// client should be prepared to receive 267 statuses for any REST call to the
|
||||
// server that is known to issue them, but must not treat them as fatal errors.
|
||||
//
|
||||
// A third-party client that had strict checks for equality to status code 200
|
||||
// would essentially fail the questionable request, bringing developers'
|
||||
// attention to the fact that the logic could be buggy, and the code should be
|
||||
// modified according to changes in official conforming applications, or updated
|
||||
// to ignore them, accepting the fact that the server is not happy.
|
||||
//
|
||||
// If a request resulted in 267 response, then any subsequent request with the
|
||||
// same parameters should also return 267 status code unless the server state
|
||||
// was changed in a way that even a genuine request would have been resulted in
|
||||
// a different status code too.
|
||||
//
|
||||
// See: https://github.com/maximal/http-267/issues/1#issuecomment-2000395105
|
||||
//
|
||||
// 267 code can be used as a soft deprecation warning for this particular API
|
||||
// endpoint and its passed or omitted parameters. Example: API version ?v= is
|
||||
// not passed and defaults to the latest version before addition of explicit
|
||||
// versioning, that is expected to be shut down soon.
|
||||
//
|
||||
// If the updated server decides that a particular cause of 267 is no longer can
|
||||
// be tolerated, it may start to return "422 Unprocessable Entity" instead, as a
|
||||
// refusal to support this deprecated API call.
|
||||
//
|
||||
// For example: Notification for the client that performs some extra work which
|
||||
// is not required for this particular API call (e.g. it sends a header with
|
||||
// cryptographically signed URL parameters even for requests that do not need to
|
||||
// be signed, contrary to other API calls that may require it).
|
||||
//
|
||||
// See: https://github.com/maximal/http-267/issues/1#issuecomment-2000599066
|
||||
const StatusQuestionableButOkay = 267
|
|
@ -0,0 +1,97 @@
|
|||
package http
|
||||
|
||||
// 700 HTTP status code series as known unknowns.
|
||||
// See: https://github.com/joho/7XX-rfc
|
||||
const (
|
||||
// Inexcusable
|
||||
StatusMeh = 701
|
||||
StatusEmacs = 702
|
||||
StatusExplosion = 703
|
||||
StatusGotoFail = 704
|
||||
StatusIWroteTheCodeAndMissedTheNecessaryValidationByAnOversight = 705 // See [StatusHeartbleed]
|
||||
StatusDeleteYourAccount = 706
|
||||
StatusCantQuitVi = 707
|
||||
|
||||
// Novelty Implementations
|
||||
StatusPHP = 710
|
||||
StatusConvenienceStore = 711
|
||||
StatusNoSQL = 712
|
||||
StatusIAmNotATeapot = 718
|
||||
StatusHaskell = 719
|
||||
|
||||
// Edge Cases
|
||||
StatusUnpossible = 720
|
||||
StatusKnownUnknowns = 721
|
||||
StatusUnknownUnknowns = 722
|
||||
StatusTricky = 723
|
||||
StatusThisLineShouldBeUnreachable = 724
|
||||
StatusItWorksOnMyMachine = 725
|
||||
StatusItsAFeatureNotABug = 726
|
||||
Status32BitsIsPlenty = 727
|
||||
StatusItWorksInMyTimezone = 728
|
||||
|
||||
// Fucking
|
||||
StatusFuckingNpm = 730
|
||||
StatusFuckingRubygems = 731
|
||||
StatusFuckingUnicode = 732
|
||||
StatusFuckingDeadlocks = 733
|
||||
StatusFuckingDeferreds = 734
|
||||
StatusFuckingRaceConditions = 736
|
||||
StatusFuckingIE = 735
|
||||
StatusFuckThreadsing = 737
|
||||
StatusFuckingExactlyOnceDelivery = 738
|
||||
StatusFuckingWindows = 739
|
||||
|
||||
// Syntax Errors
|
||||
StatusDidntBotherToCompileIt = 750
|
||||
StatusSyntaxError = 753
|
||||
StatusTooManySemiColons = 754
|
||||
StatusNotEnoughSemiColons = 755
|
||||
StatusInsufficientlyPolite = 756
|
||||
StatusExcessivelyPolite = 757
|
||||
StatusUnexpectedT_PAAMAYIM_NEKUDOTAYIM = 759
|
||||
|
||||
// Substance-Affected Developer
|
||||
StatusHungover = 761
|
||||
StatusStoned = 762
|
||||
StatusUnderCaffeinated = 763
|
||||
StatusOverCaffeinated = 764
|
||||
StatusRailscamp = 765
|
||||
StatusSober = 766
|
||||
StatusDrunk = 767
|
||||
StatusAccidentallyTookSleepingPillsInsteadOfMigrainePillsDuringCrunchWeek = 768
|
||||
|
||||
// Predictable Problems
|
||||
StatusCachedForTooLong = 771
|
||||
StatusNotCachedLongEnough = 772
|
||||
StatusNotCachedAtAll = 773
|
||||
StatusWhyWasThisCached = 774
|
||||
StatusOutOfCash = 775
|
||||
StatusErrorOnTheException = 776
|
||||
StatusCoincidence = 777
|
||||
StatusOffByOneError = 778
|
||||
StatusOffByTooManyToCountError = 779
|
||||
|
||||
// Somebody Else's Problem
|
||||
StatusProjectOwnerNotResponding = 780
|
||||
StatusOperations = 781
|
||||
StatusQA = 782
|
||||
StatusItWasACustomerRequestHonestly = 783
|
||||
StatusManagementObviously = 784
|
||||
StatusTPSCoverSheetNotAttached = 785
|
||||
StatusTryItNow = 786
|
||||
StatusFurtherFundingRequired = 787
|
||||
StatusDesignersFinalDesignsWerent = 788
|
||||
StatusNotMyDepartment = 789
|
||||
|
||||
// Internet crashed
|
||||
StatusTheInternetShutDownDueToCopyrightRestrictions = 791
|
||||
StatusClimateChangeDrivenCatastrophicWeatherEvent = 792
|
||||
StatusZombieApocalypse = 793
|
||||
StatusSomeoneLetPGNearAREPL = 794
|
||||
StatusHeartbleed = 795 // See [StatusIWroteTheCodeAndMissedTheNecessaryValidationByAnOversight]
|
||||
StatusSomeDNSFuckeryIdno = 796
|
||||
StatusThisIsTheLastPageOfTheInternetGoBack = 797
|
||||
StatusICheckedTheDbBackupsCupboardAndTheCupboardWasBare = 798
|
||||
StatusEndOfTheWorld = 799
|
||||
)
|
|
@ -0,0 +1,169 @@
|
|||
// Package http contains utilities, jokes and helpers for manipulate HTTP data
|
||||
// in clients and servers.
|
||||
package http
|
||||
|
||||
import "net/http"
|
||||
|
||||
// StatusText wraps native [net/http.StatusText], but considers the status codes
|
||||
// provided in this package before referring to the standard ones.
|
||||
func StatusText(code int) string {
|
||||
switch code {
|
||||
default:
|
||||
// Reserved for meritocracy related bullshit
|
||||
if StatusFuckingWindows < code && code < StatusDidntBotherToCompileIt {
|
||||
return "TBD. Got the brains trust on the case."
|
||||
}
|
||||
|
||||
return http.StatusText(code)
|
||||
case StatusQuestionableButOkay:
|
||||
return "Questionable But Okay"
|
||||
case StatusMeh:
|
||||
return "Meh"
|
||||
case StatusEmacs:
|
||||
return "Emacs"
|
||||
case StatusExplosion:
|
||||
return "Explosion"
|
||||
case StatusGotoFail:
|
||||
return "Goto Fail"
|
||||
case StatusIWroteTheCodeAndMissedTheNecessaryValidationByAnOversight:
|
||||
return "I wrote the code and missed the necessary validation by an oversight"
|
||||
case StatusDeleteYourAccount:
|
||||
return "Delete Your Account"
|
||||
case StatusCantQuitVi:
|
||||
return "Can't quit vi"
|
||||
case StatusPHP:
|
||||
return "PHP"
|
||||
case StatusConvenienceStore:
|
||||
return "Convenience Store"
|
||||
case StatusNoSQL:
|
||||
return "NoSQL"
|
||||
case StatusIAmNotATeapot:
|
||||
return "I am not a teapot"
|
||||
case StatusHaskell:
|
||||
return "Haskell"
|
||||
case StatusUnpossible:
|
||||
return "Unpossible"
|
||||
case StatusKnownUnknowns:
|
||||
return "Known Unknowns"
|
||||
case StatusUnknownUnknowns:
|
||||
return "Unknown Unknowns"
|
||||
case StatusTricky:
|
||||
return "Tricky"
|
||||
case StatusThisLineShouldBeUnreachable:
|
||||
return "This line should be unreachable"
|
||||
case StatusItWorksOnMyMachine:
|
||||
return "It works on my machine"
|
||||
case StatusItsAFeatureNotABug:
|
||||
return "It's a feature, not a bug"
|
||||
case Status32BitsIsPlenty:
|
||||
return "32 bits is plenty"
|
||||
case StatusItWorksInMyTimezone:
|
||||
return "It works in my timezone"
|
||||
case StatusFuckingNpm:
|
||||
return "Fucking npm"
|
||||
case StatusFuckingRubygems:
|
||||
return "Fucking Rubygems"
|
||||
case StatusFuckingUnicode:
|
||||
return "Fucking Unic💩de"
|
||||
case StatusFuckingDeadlocks:
|
||||
return "Fucking Deadlocks"
|
||||
case StatusFuckingDeferreds:
|
||||
return "Fucking Deferreds"
|
||||
case StatusFuckingRaceConditions:
|
||||
return "Fucking Race Conditions"
|
||||
case StatusFuckingIE:
|
||||
return "Fucking IE"
|
||||
case StatusFuckThreadsing:
|
||||
return "FuckThreadsing"
|
||||
case StatusFuckingExactlyOnceDelivery:
|
||||
return "Fucking Exactly-once Delivery"
|
||||
case StatusFuckingWindows:
|
||||
return "Fucking Windows"
|
||||
case StatusDidntBotherToCompileIt:
|
||||
return "Didn't bother to compile it"
|
||||
case StatusSyntaxError:
|
||||
return "Syntax Error"
|
||||
case StatusTooManySemiColons:
|
||||
return "Too many semi-colons"
|
||||
case StatusNotEnoughSemiColons:
|
||||
return "Not enough semi-colons"
|
||||
case StatusInsufficientlyPolite:
|
||||
return "Insufficiently polite"
|
||||
case StatusExcessivelyPolite:
|
||||
return "Excessively polite"
|
||||
case StatusUnexpectedT_PAAMAYIM_NEKUDOTAYIM:
|
||||
return "Unexpected \"T_PAAMAYIM_NEKUDOTAYIM\""
|
||||
case StatusHungover:
|
||||
return "Hungover"
|
||||
case StatusStoned:
|
||||
return "Stoned"
|
||||
case StatusUnderCaffeinated:
|
||||
return "Under-Caffeinated"
|
||||
case StatusOverCaffeinated:
|
||||
return "Over-Caffeinated"
|
||||
case StatusRailscamp:
|
||||
return "Railscamp"
|
||||
case StatusSober:
|
||||
return "Sober"
|
||||
case StatusDrunk:
|
||||
return "Drunk"
|
||||
case StatusAccidentallyTookSleepingPillsInsteadOfMigrainePillsDuringCrunchWeek:
|
||||
return "Accidentally Took Sleeping Pills Instead Of Migraine Pills During Crunch Week"
|
||||
case StatusCachedForTooLong:
|
||||
return "Cached for too long"
|
||||
case StatusNotCachedLongEnough:
|
||||
return "Not cached long enough"
|
||||
case StatusNotCachedAtAll:
|
||||
return "Not cached at all"
|
||||
case StatusWhyWasThisCached:
|
||||
return "Why was this cached?"
|
||||
case StatusOutOfCash:
|
||||
return "Out of cash"
|
||||
case StatusErrorOnTheException:
|
||||
return "Error on the Exception"
|
||||
case StatusCoincidence:
|
||||
return "Coincidence"
|
||||
case StatusOffByOneError:
|
||||
return "Off By One Error"
|
||||
case StatusOffByTooManyToCountError:
|
||||
return "Off By Too Many To Count Error"
|
||||
case StatusProjectOwnerNotResponding:
|
||||
return "Project owner not responding"
|
||||
case StatusOperations:
|
||||
return "Operations"
|
||||
case StatusQA:
|
||||
return "QA"
|
||||
case StatusItWasACustomerRequestHonestly:
|
||||
return "It was a customer request, honestly"
|
||||
case StatusManagementObviously:
|
||||
return "Management, obviously"
|
||||
case StatusTPSCoverSheetNotAttached:
|
||||
return "TPS Cover Sheet not attached"
|
||||
case StatusTryItNow:
|
||||
return "Try it now"
|
||||
case StatusFurtherFundingRequired:
|
||||
return "Further Funding Required"
|
||||
case StatusDesignersFinalDesignsWerent:
|
||||
return "Designer's final designs weren't"
|
||||
case StatusNotMyDepartment:
|
||||
return "Not my department"
|
||||
case StatusTheInternetShutDownDueToCopyrightRestrictions:
|
||||
return "The Internet shut down due to copyright restrictions"
|
||||
case StatusClimateChangeDrivenCatastrophicWeatherEvent:
|
||||
return "Climate change driven catastrophic weather event"
|
||||
case StatusZombieApocalypse:
|
||||
return "Zombie Apocalypse"
|
||||
case StatusSomeoneLetPGNearAREPL:
|
||||
return "Someone let PG near a REPL"
|
||||
case StatusHeartbleed:
|
||||
return "#heartbleed"
|
||||
case StatusSomeDNSFuckeryIdno:
|
||||
return "Some DNS fuckery idno"
|
||||
case StatusThisIsTheLastPageOfTheInternetGoBack:
|
||||
return "This is the last page of the Internet. Go back"
|
||||
case StatusICheckedTheDbBackupsCupboardAndTheCupboardWasBare:
|
||||
return "I checked the db backups cupboard and the cupboard was bare"
|
||||
case StatusEndOfTheWorld:
|
||||
return "End of the world"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue