When does this go live?

On Friday, May 1, 2015, Ryan Kaldari <rkald...@wikimedia.org> wrote:

> Wow, this list of changes fixes a lot of things that I've hated about our
> API for a long time (no more star properties! no more setIndexedTagName
> errors! consistent JSON formatting!). I feel like it's Christmas! Thanks
> for all your hard work on this Brad! It is much appreciated.
>
> Kaldari
>
> On Fri, May 1, 2015 at 7:53 AM, Brad Jorsch (Anomie) <
> bjor...@wikimedia.org <javascript:;>>
> wrote:
>
> > After a lot of work, we're ready to provide a more sensible data layout
> for
> > format=json results (and also format=php). The changes are generally
> > backwards-compatible for API clients, but extension developers might have
> > some work to do. If your extension is maintained in Gerrit, much of the
> > necessary conversion has already been done for you (the major exception
> > being booleans that were violating the old API output conventions).
> >
> > The general theme is that the ApiResult arrays now have more metadata,
> > which is used to apply a backwards-compatible transformation for clients
> > that need it and optional transformation so JSON output needn't be
> limited
> > by restrictions of XML. At the same time, improvements were made to
> > ApiResult and ApiFormatXml to hopefully make it easier for developers to
> > use.
> >
> > Relevant changes include:
> >
> >    - Several ApiResult methods were deprecated. If your extension is
> >    maintained in Gerrit, these should have already been taken care of for
> > you
> >    (with the exception of T95168 <
> https://phabricator.wikimedia.org/T95168
> > >
> >    where work is ongoing), but new code will need to avoid the deprecated
> >    methods.
> >    - All ApiResult methods that operate on a passed-in array (rather than
> >    internal data) are now static, and static versions of all relevant
> data-
> >    and metadata-manipulation methods are provided. This should reduce the
> > need
> >    for passing ApiResult instances around just to be able to set
> metadata.
> >    - Properties with names beginning with underscores are reserved for
> API
> >    metadata (following the lead of existing "_element" and
> "_subelements"),
> >    and will be stripped from output. Such properties may be marked as
> >    non-metadata using ApiResult::setPreserveKeysList(), if necessary.
> >    - PHP-arrays can now be tagged with "array types" to indicate whether
> >    they should be output as arrays or hashes. This is particularly useful
> > to
> >    fix T12887 <https://phabricator.wikimedia.org/T12887>.
> >    - The "*" property is deprecated in favor of a properly-named property
> >    and special metadata to identify it for XML format and for
> >    back-transformation. Use ApiResult::setContentValue() instead of
> >    ApiResult::setContent() and all the details are handled for you.
> >    - ApiFormatXml will no longer throw an exception if you forget to call
> >    ApiResult::setIndexedTagName()!
> >    - ApiFormatXml will now reversibly mangle tag and attribute names that
> >    are not valid XML, instead of irreversibly mangling spaces and
> > outputting
> >    invalid XML for other stuff.
> >    - ApiResult will now validate data added (e.g. adding resources or
> >    non-finite floats will throw an exception) and auto-convert objects.
> The
> >    ApiSerializable interface can be used to control object conversion, if
> >    __toString() or cast-to-array is inappropriate.
> >    - Actual booleans should now be added to ApiResult, and will be
> >    automatically converted to the old convention (empty-string for true
> and
> >    absent for false) when needed for backwards compatibility. Code that
> was
> >    violating the old convention will need to use the new
> >    ApiResult::META_BC_BOOLS metadata property to prevent this conversion.
> >    - Modules outputting as {"key":{"*":"value"}} to avoid large strings
> in
> >    XML attributes can now output as {"key":"value"} while still
> maintaining
> >    <container><key>value</key></container> in XML format, using
> >    ApiResult::META_BC_SUBELEMENTS. New code should use
> >    ApiResult::setSubelementsList() instead.
> >    - Modules outputting hashes as
> >    [{"name":"key1","*":"value1"},{"name":"key2","*":"value2"}] (due to
> the
> >    keys being invalid for XML) can now output as
> >    {"key1":"value1","key2":"value2"} in JSON while maintaining
> > <container><item
> >    name="key1">value1</item><item name="key2">value2</item></container>
> in
> >    XML format, using array types "kvp" or "BCkvp".
> >
> > I apologize for forgetting to announce this sooner. If developers need
> > assistance with API issues or code review for API modules, please do
> reach
> > out to me.
> >
> >
> > --
> > Brad Jorsch (Anomie)
> > Software Engineer
> > Wikimedia Foundation
> > _______________________________________________
> > Wikitech-l mailing list
> > Wikitech-l@lists.wikimedia.org <javascript:;>
> > https://lists.wikimedia.org/mailman/listinfo/wikitech-l
> _______________________________________________
> Wikitech-l mailing list
> Wikitech-l@lists.wikimedia.org <javascript:;>
> https://lists.wikimedia.org/mailman/listinfo/wikitech-l
_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to