Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:78514 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 96862 invoked from network); 31 Oct 2014 16:44:36 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 31 Oct 2014 16:44:36 -0000 Authentication-Results: pb1.pair.com header.from=dragoonis@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=dragoonis@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.216.41 as permitted sender) X-PHP-List-Original-Sender: dragoonis@gmail.com X-Host-Fingerprint: 209.85.216.41 mail-qa0-f41.google.com Received: from [209.85.216.41] ([209.85.216.41:40260] helo=mail-qa0-f41.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 0B/C2-15608-27CB3545 for ; Fri, 31 Oct 2014 11:44:35 -0500 Received: by mail-qa0-f41.google.com with SMTP id v10so4073869qac.28 for ; Fri, 31 Oct 2014 09:44:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=9hbcVSzUTGLLbPmIqWGdh4XMutPxjxx0uavdTlsz3Uw=; b=xPX3/EnXvBOeKYepmABQCcQ4AkFcsUG9ialfmYehWvW1Ym/a7GQJGCL1tvF1inGx9m +6aZZfo9ezQ9BZAcEyWfbz/r5mnyL3EkBnzEBCTa3GuvxH+bNS0qPgloezqV4zL2MB/C cDXXBsZA5oIGvZeu2UD0XfU6Z77ZFlLRp8SwFBXSBdXjkuMQDQjgwl6pBm42B5XISfNK 1iFLB2FnFx5CEtls0WgfWgSV2FPrdSvi1XTl2ynQhAkDdsscyQLFDvoLEvda4U5nh0fO upsPGE8/Klj1QsvZz1xV4SGquWc9aHvLuFH8SYPw7xwOk0wtfFkYCOyGMVzRqEE8Qg0A p+og== MIME-Version: 1.0 X-Received: by 10.224.120.135 with SMTP id d7mr39337946qar.10.1414773872223; Fri, 31 Oct 2014 09:44:32 -0700 (PDT) Received: by 10.229.94.201 with HTTP; Fri, 31 Oct 2014 09:44:32 -0700 (PDT) Received: by 10.229.94.201 with HTTP; Fri, 31 Oct 2014 09:44:32 -0700 (PDT) In-Reply-To: References: Date: Fri, 31 Oct 2014 16:44:32 +0000 Message-ID: To: "Sherif Ramadan (php mailing list)" Cc: PHP Internals List Content-Type: multipart/alternative; boundary=001a11c302ee17809b0506bab6b7 Subject: Re: [PHP-DEV] New Standardized HTTP Interface From: dragoonis@gmail.com (Paul Dragoonis) --001a11c302ee17809b0506bab6b7 Content-Type: text/plain; charset=UTF-8 On 30 Oct 2014 19:03, "Sherif Ramadan" wrote: > > Hello Internals, > > I've been meaning to write up a full-blown RFC for introducing a new > standardized HTTP interface for PHP core for some time now. I figure now > with PHP 7 on the road map this might be a good time to start this > discussion since it involves breaking some backwards compatibility that may > have been out of the question in PHP 5. > > I've started a draft RFC, but please be patient as this is a working in > progress, here https://wiki.php.net/rfc/http-interface on the wiki. > > The point here is to allow users to implement their own HttpRequest and > HttpResponse classes that can deal directly with the raw request/response > messages in any way the user deems fit. This alleviates cases like "what > about when I want to have $_PUT or $_DELETE" and removes the ambiguity of > the $_POST, $_GET superglobals to a more conforming way of handling the > messages. > > Since it's an interface, it only dictates the facilitation of PHP's > built-in functionality and the user's desired implementation, but no the > implementation itself. To remove all confusion, consider the way an HTTP > message actually looks. > > GET /foo?bar=1 HTTP/1.1 > Host: foobar.com > > baz=2 > > Instead of treating this with current $_GET, $_POST, let's consider for a > moment how we might treat it in an HttpRequest object: > > If the HttpRequest class implements an HttpParameters object that parses > and treats the entire HTTP request line as a string of parameters we could > accomplish the following... > > var_dump(HttpRequest::$parameters->bar); // int(1) > var_dump((string) HttpRequest::$parameters); // string(6)"?bar=1" > > Now consider how the body can be treated... > > echo HttpRequest::$body; // baz=2 > echo HttpRequest::$body->baz; // 2 > > Since the HttpRequest object can lazily parse the body it can also lazily > apply custom filters directly to the request variables and parameters... > > For example, say you wish to treat baz only as an integer? This can be > easily accomplished by setting the filters directly in the HttpRequest > object and upon access the filter is directly applied to chosen variables. > This also alleviates the need to worry about overwriting superglobal > variables or having to copy from them. So from an efficiency stand-point > this approach works much better. It also allows you to separate clearly > between HTTP request parameters and HTTP request body as well as the HTTP > request method. Since the request object should be capable of handling > callbacks for each method to apply different sets of filters or rules on > treating the request body given different request methods this could prove > a lot more useful than existing techniques applied directly in PHP with > php://input, for example. > > We don't need to copy the internal stream and we don't need to modify or > copy superglobals around to different parts of our code. > > I'm in the process of writing up a cleaner implementation to introduce in > the RFC, but in the mean time I'd like to open up to discussion and see > what others think or how they feel we might approach this problem more > cleanly. > > Thanks, > Sherif This is clearly a responsibility of PHPFIG for interface recommendations and not the responsibility of the core language. --001a11c302ee17809b0506bab6b7--