or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

authentication.mdcontent-multipart.mdcontent-types.mdcookies.mdheaders-parameters.mdhttp-protocol.mdindex.mdurl-handling.md
tile.json

http-protocol.mddocs/

HTTP Methods and Status Codes

Core HTTP protocol elements providing standard methods and comprehensive status code definitions with parsing and validation capabilities.

HTTP Methods

HttpMethod Class

data class HttpMethod(val value: String) {
    override fun toString(): String

The HttpMethod class represents HTTP request methods (verbs) in a type-safe manner.

Predefined Methods

data class HttpMethod(val value: String) {
    companion object {
    val HttpStatusCode.Companion.Get: HttpMethod
    val HttpStatusCode.Companion.Post: HttpMethod
    val HttpStatusCode.Companion.Put: HttpMethod
    val HttpStatusCode.Companion.Patch: HttpMethod
    val HttpStatusCode.Companion.Delete: HttpMethod
    val HttpStatusCode.Companion.Head: HttpMethod
    val HttpStatusCode.Companion.Options: HttpMethod
    val HttpStatusCode.Companion.DefaultMethods: List<HttpMethod>
        
        fun parse(method: String): HttpMethod
    }

Usage Examples

// Using predefined methods
val getRequest = HttpMethod.Get
val postRequest = HttpMethod.Post

// Parsing custom methods
val customMethod = HttpMethod.parse("PATCH")
val webdavMethod = HttpMethod.parse("PROPFIND")

// Working with method lists
val supportedMethods = HttpMethod.DefaultMethods
println("Supports ${supportedMethods.size} standard methods")

Method Properties

val HttpMethod.supportsRequestBody: Boolean

Extension property that determines if an HTTP method typically supports request bodies. Returns false for GET, HEAD, OPTIONS, and TRACE methods.

import io.ktor.http.*

val canHaveBody = HttpMethod.Post.supportsRequestBody // true
val noBody = HttpMethod.Get.supportsRequestBody // false
val headNoBody = HttpMethod.Head.supportsRequestBody // false

HTTP Status Codes

HttpStatusCode Class

data class HttpStatusCode(val value: Int, val description: String) : Comparable<HttpStatusCode> {
    override fun toString(): String
    override fun equals(other: Any?): Boolean
    override fun hashCode(): Int
    override fun compareTo(other: HttpStatusCode): Int
    
    fun description(value: String): HttpStatusCode

Status Code Creation and Utilities

fun HttpStatusCode.Companion.fromValue(value: Int): HttpStatusCode
val HttpStatusCode.Companion.allStatusCodes: List<HttpStatusCode>
fun HttpStatusCode.isSuccess(): Boolean

The isSuccess() extension function returns true for status codes in the 200-299 range.

1xx Informational

val HttpStatusCode.Companion.Continue: HttpStatusCode // 100
val HttpStatusCode.Companion.SwitchingProtocols: HttpStatusCode // 101
val HttpStatusCode.Companion.Processing: HttpStatusCode // 102

2xx Success

val HttpStatusCode.Companion.OK: HttpStatusCode // 200
val HttpStatusCode.Companion.Created: HttpStatusCode // 201
val HttpStatusCode.Companion.Accepted: HttpStatusCode // 202
val HttpStatusCode.Companion.NonAuthoritativeInformation: HttpStatusCode // 203
val HttpStatusCode.Companion.NoContent: HttpStatusCode // 204
val HttpStatusCode.Companion.ResetContent: HttpStatusCode // 205
val HttpStatusCode.Companion.PartialContent: HttpStatusCode // 206
val HttpStatusCode.Companion.MultiStatus: HttpStatusCode // 207
val HttpStatusCode.Companion.AlreadyReported: HttpStatusCode // 208
val HttpStatusCode.Companion.IMUsed: HttpStatusCode // 226

3xx Redirection

val HttpStatusCode.Companion.MultipleChoices: HttpStatusCode // 300
val HttpStatusCode.Companion.MovedPermanently: HttpStatusCode // 301
val HttpStatusCode.Companion.Found: HttpStatusCode // 302
val HttpStatusCode.Companion.SeeOther: HttpStatusCode // 303
val HttpStatusCode.Companion.NotModified: HttpStatusCode // 304
val HttpStatusCode.Companion.UseProxy: HttpStatusCode // 305
val HttpStatusCode.Companion.SwitchProxy: HttpStatusCode // 306
val HttpStatusCode.Companion.TemporaryRedirect: HttpStatusCode // 307
val HttpStatusCode.Companion.PermanentRedirect: HttpStatusCode // 308

4xx Client Error

val HttpStatusCode.Companion.BadRequest: HttpStatusCode // 400
val HttpStatusCode.Companion.Unauthorized: HttpStatusCode // 401
val HttpStatusCode.Companion.PaymentRequired: HttpStatusCode // 402
val HttpStatusCode.Companion.Forbidden: HttpStatusCode // 403
val HttpStatusCode.Companion.NotFound: HttpStatusCode // 404
val HttpStatusCode.Companion.MethodNotAllowed: HttpStatusCode // 405
val HttpStatusCode.Companion.NotAcceptable: HttpStatusCode // 406
val HttpStatusCode.Companion.ProxyAuthenticationRequired: HttpStatusCode // 407
val HttpStatusCode.Companion.RequestTimeout: HttpStatusCode // 408
val HttpStatusCode.Companion.Conflict: HttpStatusCode // 409
val HttpStatusCode.Companion.Gone: HttpStatusCode // 410
val HttpStatusCode.Companion.LengthRequired: HttpStatusCode // 411
val HttpStatusCode.Companion.PreconditionFailed: HttpStatusCode // 412
val HttpStatusCode.Companion.PayloadTooLarge: HttpStatusCode // 413
val HttpStatusCode.Companion.RequestURITooLong: HttpStatusCode // 414
val HttpStatusCode.Companion.UnsupportedMediaType: HttpStatusCode // 415
val HttpStatusCode.Companion.RequestedRangeNotSatisfiable: HttpStatusCode // 416
val HttpStatusCode.Companion.ExpectationFailed: HttpStatusCode // 417
val HttpStatusCode.Companion.UnprocessableEntity: HttpStatusCode // 422
val HttpStatusCode.Companion.Locked: HttpStatusCode // 423
val HttpStatusCode.Companion.FailedDependency: HttpStatusCode // 424
val HttpStatusCode.Companion.TooEarly: HttpStatusCode // 425
val HttpStatusCode.Companion.UpgradeRequired: HttpStatusCode // 426
val HttpStatusCode.Companion.PreconditionRequired: HttpStatusCode // 428
val HttpStatusCode.Companion.TooManyRequests: HttpStatusCode // 429
val HttpStatusCode.Companion.RequestHeaderFieldsTooLarge: HttpStatusCode // 431

5xx Server Error

val HttpStatusCode.Companion.InternalServerError: HttpStatusCode // 500
val HttpStatusCode.Companion.NotImplemented: HttpStatusCode // 501
val HttpStatusCode.Companion.BadGateway: HttpStatusCode // 502
val HttpStatusCode.Companion.ServiceUnavailable: HttpStatusCode // 503
val HttpStatusCode.Companion.GatewayTimeout: HttpStatusCode // 504
val HttpStatusCode.Companion.VersionNotSupported: HttpStatusCode // 505
val HttpStatusCode.Companion.VariantAlsoNegotiates: HttpStatusCode // 506
val HttpStatusCode.Companion.InsufficientStorage: HttpStatusCode // 507
val HttpStatusCode.Companion.LoopDetected: HttpStatusCode // 508
val HttpStatusCode.Companion.NotExtended: HttpStatusCode // 510
val HttpStatusCode.Companion.NetworkAuthenticationRequired: HttpStatusCode // 511

Usage Examples

Working with Status Codes

// Using predefined status codes
val success = HttpStatusCode.OK
val notFound = HttpStatusCode.NotFound
val serverError = HttpStatusCode.InternalServerError

// Creating custom status codes
val customStatus = HttpStatusCode(299, "Custom Success")

// Modifying descriptions
val customOk = HttpStatusCode.OK.description("Request Processed Successfully")

// Finding status codes by value
val statusByValue = HttpStatusCode.fromValue(404) // Returns NotFound

// Comparing status codes
val isClientError = status.value in 400..499
val isSuccess = status.value in 200..299

// Working with all status codes
val allStatuses = HttpStatusCode.allStatusCodes
println("Total defined status codes: ${allStatuses.size}")

Conditional Logic

fun handleResponse(status: HttpStatusCode) {
    when {
        status.value in 200..299 -> println("Success: ${status.description}")
        status.value in 300..399 -> println("Redirect: ${status.description}")
        status.value in 400..499 -> println("Client Error: ${status.description}")
        status.value in 500..599 -> println("Server Error: ${status.description}")
        else -> println("Unknown status: $status")
    }
}

// Usage
handleResponse(HttpStatusCode.OK)
handleResponse(HttpStatusCode.NotFound)
handleResponse(HttpStatusCode.InternalServerError)