{"result":{"depiction_url":"https:\/\/zotonic.com\/image\/2022\/3\/31\/screenshot_2022_03_31_at_16_25_58.png%28800x800%29%28upscale%29%28rqLinLS2PQdRuVc7KjZkbVqo4zx6PNJlX35BgwyyM3U%29.jpg","edges":{"depiction":{"objects":[{"created":"2022-03-31T14:27:38Z","object_id":{"id":2313,"is_a":["media","image"],"name":null,"title":"Screenshot 2022-03-31 at 16.25.58.png","uri":"https:\/\/zotonic.com\/id\/2313"},"seq":1000000}],"predicate":{"id":304,"is_a":["meta","predicate"],"name":"depiction","title":{"_type":"trans","tr":{"nl":"Afbeelding","en":"Depiction"}},"uri":"http:\/\/xmlns.com\/foaf\/0.1\/depiction"}},"subject":{"objects":[{"created":"2026-09-14T05:53:52Z","object_id":{"id":2555,"is_a":["categorization","keyword","keyword_information_type"],"name":"zotonic_topic_reference","title":"Reference","uri":"https:\/\/zotonic.com\/id\/2555"},"seq":1000000},{"created":"2026-09-14T05:53:54Z","object_id":{"id":2564,"is_a":["categorization","keyword","keyword_audience"],"name":"zotonic_topic_backend_developer","title":"Backend developer","uri":"https:\/\/zotonic.com\/id\/2564"},"seq":1000000},{"created":"2026-09-14T05:54:22Z","object_id":{"id":2613,"is_a":["categorization","keyword","keyword_domain"],"name":"zotonic_topic_development_and_debugging","title":"Development and debugging","uri":"https:\/\/zotonic.com\/id\/2613"},"seq":1000000},{"created":"2026-09-14T05:54:36Z","object_id":{"id":2626,"is_a":["categorization","keyword","keyword_architecture"],"name":"zotonic_topic_controller","title":"Controller","uri":"https:\/\/zotonic.com\/id\/2626"},"seq":1000000},{"created":"2026-09-14T05:55:29Z","object_id":{"id":2676,"is_a":["categorization","keyword","keyword_technology"],"name":"zotonic_topic_http","title":"HTTP","uri":"https:\/\/zotonic.com\/id\/2676"},"seq":1000000},{"created":"2026-09-14T05:55:38Z","object_id":{"id":2690,"is_a":["categorization","keyword","keyword_quality"],"name":"zotonic_topic_interoperability","title":"Interoperability","uri":"https:\/\/zotonic.com\/id\/2690"},"seq":1000000}],"predicate":{"id":308,"is_a":["meta","predicate"],"name":"subject","title":{"_type":"trans","tr":{"en":"Keyword"}},"uri":"http:\/\/purl.org\/dc\/elements\/1.1\/subject"}}},"id":2238,"is_a":["media","document"],"links":[{"rel":"self","target":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/2238"},{"rel":"hub","target":"https:\/\/zotonic.com\/.zotonic\/websub"}],"medium":{"created":"2022-01-12T11:31:11Z","digest":null,"filename":"2022\/1\/12\/http_headers_status.pdf","frame_count":null,"height":4564,"id":2238,"is_av_scanned":true,"is_deletable_file":true,"is_deletable_preview":false,"mime":"application\/pdf","orientation":1,"original_filename":"http_headers_status.pdf","preview_filename":null,"preview_height":0,"preview_width":0,"rootname":"http_headers_status","size":48869,"width":1219},"medium_url":"https:\/\/zotonic.com\/media\/attachment\/id\/2238","name":null,"page_url":{"en":"https:\/\/zotonic.com\/page\/2238\/cowmachine-decision-flow-and-callbacks","x-default":"https:\/\/zotonic.com\/page\/2238\/cowmachine-decision-flow-and-callbacks"},"preview_url":"https:\/\/zotonic.com\/image\/2022\/3\/31\/screenshot_2022_03_31_at_16_25_58.png%28800x800%29%28upscale%29%28rqLinLS2PQdRuVc7KjZkbVqo4zx6PNJlX35BgwyyM3U%29.jpg","resource":{"version":7,"pivot_location_lat":null,"medium_edit_settings":{},"title":{"_type":"trans","tr":{"en":"Cowmachine decision flow and callbacks"}},"is_authoritative":true,"body":{"_type":"trans","tr":{"en":"<p>HTTP requests are handled by <a title=\"Controllers\" href=\"\/page\/321\/controllers\">controllers<\/a>. Controllers are implemented using callbacks from a HTTP state machine which handles the HTTP request. The state machine is called <a rel=\"noopener noreferrer\" href=\"https:\/\/github.com\/zotonic\/cowmachine\" target=\"_blank\">Cowmachine<\/a>.<\/p>\n<p>Cowmachine is an adaptation from <a rel=\"noopener noreferrer\" href=\"https:\/\/github.com\/webmachine\/webmachine\" target=\"_blank\">Webmachine<\/a>. It is simpler, faster and uses the HTTP library <a rel=\"noopener noreferrer\" href=\"https:\/\/github.com\/ninenines\/cowboy\" target=\"_blank\">Cowboy<\/a> instead of Mochiweb.<\/p>"}},"slug":"cowmachine-decision-flow-and-callbacks","is_protected":false,"visible_for":0,"tz":"UTC","language":["en"],"is_featured":false,"content_group_id":{"id":339,"is_a":["meta","content_group"],"name":"default_content_group","title":{"_type":"trans","tr":{"en":"Default Content Group"}},"uri":"https:\/\/zotonic.com\/id\/default_content_group"},"category_id":{"id":114,"is_a":["meta","category"],"name":"document","title":{"_type":"trans","tr":{"nl":"Document","en":"Document"}},"uri":"https:\/\/zotonic.com\/id\/document"},"publication_start":"2020-12-23T11:23:00Z","is_website_redirect":false,"pivot_location_lng":null,"name":null,"is_unfindable":false,"is_published":true,"summary":{"_type":"trans","tr":{"en":"Overview of controller callbacks and decisions."}},"pivot_geocode":null,"custom_slug":false,"created":"2020-12-23T11:23:32Z","uri":null,"is_dependent":false,"is_page_path_multiple":false,"publication_end":"9999-08-17T12:00:00Z","modifier_id":{"id":1,"is_a":["person"],"name":"administrator","title":"Site Administrator","uri":"https:\/\/zotonic.com\/id\/1"},"privacy":0,"is_zlink":false,"original_filename":"http_headers_status.pdf","creator_id":{"id":1,"is_a":["person"],"name":"administrator","title":"Site Administrator","uri":"https:\/\/zotonic.com\/id\/1"},"seo_noindex":false,"modified":"2021-10-29T08:36:50Z","title_slug":{"_type":"trans","tr":{"en":"cowmachine-decision-flow-and-callbacks"}}},"uri":"https:\/\/zotonic.com\/id\/2238","uri_template":"https:\/\/zotonic.com\/id\/:id","websub":{"hub":"https:\/\/zotonic.com\/.zotonic\/websub","topic":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/2238"}},"status":"ok"}