Conference paper Open Access

From OpenAPI Fragments to API Pattern Primitives and Design Smells

Serbout, Souhaila; Pautasso, Cesare; Zdun, Uwe; Zimmermann, Olaf


MARC21 XML Export

<?xml version='1.0' encoding='UTF-8'?>
<record xmlns="http://www.loc.gov/MARC21/slim">
  <leader>00000nam##2200000uu#4500</leader>
  <datafield tag="540" ind1=" " ind2=" ">
    <subfield code="u">https://creativecommons.org/licenses/by/4.0/legalcode</subfield>
    <subfield code="a">Creative Commons Attribution 4.0 International</subfield>
  </datafield>
  <datafield tag="260" ind1=" " ind2=" ">
    <subfield code="c">2021-11-25</subfield>
  </datafield>
  <controlfield tag="005">20211126014846.0</controlfield>
  <controlfield tag="001">5727094</controlfield>
  <datafield tag="909" ind1="C" ind2="O">
    <subfield code="p">openaire</subfield>
    <subfield code="o">oai:zenodo.org:5727094</subfield>
  </datafield>
  <datafield tag="520" ind1=" " ind2=" ">
    <subfield code="a">&lt;p&gt;In the past few years, the OpenAPI Specification (OAS) has emerged&lt;br&gt;
as a standard description language for accurately modeling Web&lt;br&gt;
APIs. Today, thousands of OpenAPI descriptions can be found by&lt;br&gt;
mining open source repositories. In this paper, we attempt to exploit&lt;br&gt;
these artifacts to extract commonly occurring building blocks used&lt;br&gt;
inWeb API structures, in order to assistWeb API designers in their&lt;br&gt;
modelling task. Our work is based on a fragmentation mechanism,&lt;br&gt;
that starts from OpenAPI descriptions ofWeb APIs to extract their&lt;br&gt;
structures, then fragment these structures into smaller blocks. This&lt;br&gt;
approach enabled us to extract a large dataset of reoccurring fragments&lt;br&gt;
from a collection of 6619 API specifications. Such fragments&lt;br&gt;
have been found multiple times in the same or across different APIs.&lt;br&gt;
We have classified the most reoccurring fragments into four pattern&lt;br&gt;
primitives used to expose in the API access to collections of items.&lt;br&gt;
We distinguish for each primitive variants from design smells. This&lt;br&gt;
classification is based on the specific combinations of operations&lt;br&gt;
associated with the collection items and on an in-depth analysis of&lt;br&gt;
their natural language labels and descriptions. The resulting pattern&lt;br&gt;
primitives are intended to support designers who would like to introduce&lt;br&gt;
one or more collections for a specific class of items in their&lt;br&gt;
HTTP-based API.&lt;/p&gt;</subfield>
  </datafield>
  <datafield tag="700" ind1=" " ind2=" ">
    <subfield code="u">Software Institute, USI</subfield>
    <subfield code="a">Pautasso, Cesare</subfield>
  </datafield>
  <datafield tag="700" ind1=" " ind2=" ">
    <subfield code="u">University of Vienna</subfield>
    <subfield code="0">(orcid)0000-0002-6233-2591</subfield>
    <subfield code="a">Zdun, Uwe</subfield>
  </datafield>
  <datafield tag="700" ind1=" " ind2=" ">
    <subfield code="u">University of Applied Sciences of Eastern Switzerland</subfield>
    <subfield code="a">Zimmermann, Olaf</subfield>
  </datafield>
  <datafield tag="856" ind1="4" ind2=" ">
    <subfield code="s">3435165</subfield>
    <subfield code="z">md5:15df08091f1decf9cb0a89cab434ca93</subfield>
    <subfield code="u">https://zenodo.org/record/5727094/files/main.pdf</subfield>
  </datafield>
  <datafield tag="542" ind1=" " ind2=" ">
    <subfield code="l">open</subfield>
  </datafield>
  <datafield tag="980" ind1=" " ind2=" ">
    <subfield code="a">publication</subfield>
    <subfield code="b">conferencepaper</subfield>
  </datafield>
  <datafield tag="100" ind1=" " ind2=" ">
    <subfield code="u">Software Institute, USI</subfield>
    <subfield code="a">Serbout, Souhaila</subfield>
  </datafield>
  <datafield tag="041" ind1=" " ind2=" ">
    <subfield code="a">eng</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">Application Programming Interfaces</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">API Patterns</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">API Design Smells</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">API Structural Fragments</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">Pattern Minning</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">OpenAPI</subfield>
  </datafield>
  <datafield tag="024" ind1=" " ind2=" ">
    <subfield code="a">10.1145/3489449.3489998</subfield>
    <subfield code="2">doi</subfield>
  </datafield>
  <datafield tag="245" ind1=" " ind2=" ">
    <subfield code="a">From OpenAPI Fragments to API Pattern Primitives and Design Smells</subfield>
  </datafield>
  <datafield tag="536" ind1=" " ind2=" ">
    <subfield code="c">200021L_184692</subfield>
    <subfield code="a">API-ACE: Analytics-based Continuous Design and Evolution of Microservice APIs</subfield>
  </datafield>
  <datafield tag="536" ind1=" " ind2=" ">
    <subfield code="c">I 4268</subfield>
    <subfield code="a">Analytics-centric Continuous Design of Microservice APIs</subfield>
  </datafield>
  <datafield tag="650" ind1="1" ind2="7">
    <subfield code="a">cc-by</subfield>
    <subfield code="2">opendefinition.org</subfield>
  </datafield>
</record>
70
94
views
downloads
Views 70
Downloads 94
Data volume 322.9 MB
Unique views 65
Unique downloads 89

Share

Cite as