Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [hono-dev] Definition of Hono's public API

On 28.01.20 15:54, Lohmann Carsten (IOC/PAP-HU) wrote:
>> -----Original Message-----
>> From: hono-dev-bounces@xxxxxxxxxxx <hono-dev-bounces@xxxxxxxxxxx> On
>> Behalf Of Hudalla Kai (IOC/PAP-HU)
>> Sent: Dienstag, 28. Januar 2020 15:22
>> To: hono-dev@xxxxxxxxxxx
>> Subject: Re: [hono-dev] Definition of Hono's public API
>>
>> On 28.01.20 10:44, Jens Reimann wrote:
>>> Yes, I agree that the service-base mobile is a rather large chunk of code.
>>>
>>> Personally I think it would make sense breaking it up into smaller
>>> pieces. Which would also make it easier to declare what is public, and
>>> what not.
>>>
>>
>> Placing all the public classes into a separate module/jar certainly
>> makes sense. However, IMHO in order to do that we first need to identify
>> the classes that we consider public API.
>>
>> My understanding so far is that we agree that the core and client
>> modules are public API. In addition, all remote API definitions and the
>> protocol adapters' device-side interfaces are public API as well.
>> However, the protocol adapter implementions are *not* public API.
>>
>> Based on the further assumption that we also want to provide the device
>> registry base classes as public API, we could take the following approach:
>> Start from those base classes and determine all classes/interfaces that
>> they depend on either directly or transitively within the service-base
>> module. All these classes/interfaces are then part of the public API
>> while all the remaining classes/interfaces of service-base are private API.
>>
>> Based on this partitioning we can then see if we are able to create a
>> separate module for just the public API without creating split packages
>> or if we also need to move some classes to other packages before doing so.
>>
>> Would that work for everybody?
> 
> Yes, sounds good. 
> 
> Regarding the "service-base" module, as I see it, the following classes in "org/eclipse/hono/service" directly represent the device registry base classes:
> ---
> auth/
>   AuthenticationService.java
> 
> credentials/
>   CredentialsService.java
>   EventBusCredentialsAdapter.java
> 
> deviceconnection/
>   DeviceConnectionService.java
>   EventBusDeviceConnectionAdapter.java
> 
> management/
>   credentials/
>      CredentialsManagementService.java
>      EventBusCredentialsManagementAdapter.java
>   device/
>      DeviceManagementService.java
>      EventBusDeviceManagementAdapter.java
>      (possibly also DeviceBackend.java)
>   tenant/
>      TenantManagementService.java
>      EventBusTenantManagementAdapter.java
>      (possibly also TenantBackend.java)
> 
> registration/
>   EventBusRegistrationAdapter.java
>   RegistrationService.java
> 
> tenant/
>   EventBusTenantAdapter.java
>   TenantService.java
> ---
> 

What about
management/
  credentials/
    CredentialsManagementHttpEndpoint

  device/
    DeviceManagementHttpEndpoint

  tenant/
    TenantManagementHttpEndpoint
> 
> Dependent on these are:

Is suppose you mean that the base classes above depend on the following
classes/interfaces below, right?

> ---
> management
>   credentials
>     CommonCredential.java
>     GenericCredential.java
>     PasswordCredential.java
>     PskCredential.java
>     X509CertificateCredential.java
>   device
>     Device.java
>   tenant
>     Tenant.java
>   Id.java
>   OperationResult.java
>   Result.java
>   Util.java
> EventBusService.java
> ---
> 
> So we could either mark these with Public API annotations or split the package accordingly (dependent classes could also be put in hono-core at some point).

If I am not mistaken then there are other (private) classes remaining in
the above packages so we would actually create split packages if me
moved the public API classes to a separate module/jar.

> 
> 
>>
>>
>>> Maybe a quick solution to that is to not declare the service-base module
>>> public. And split the module into smaller chunks for 1.2.x. We could
>>> still provide a "fat jar", composed of the other JARs for 1.2, to make
>>> it easier to migrate.
>>
>>> On Mon, Jan 27, 2020 at 5:15 PM Dejan Bosanac <dejanb@xxxxxxxxxxxx
>>> <mailto:dejanb@xxxxxxxxxxxx>> wrote:
>>>
>>>     Hi Kai,
>>>
>>>     I still think there are a lot of interfaces/classes in service-base
>>>     module that we should consider the public API. All device registry
>>>     and device connection services definitions live there.
>>>
>>>     On Wed, Jan 22, 2020 at 9:41 AM Hudalla Kai (IOC/PAP-HU)
>>>     <Kai.Hudalla@xxxxxxxx <mailto:Kai.Hudalla@xxxxxxxx>> wrote:
>>>
>>>         Sorry, forgot to add the links ...
>>>
>>>         Based on the discussions I had with Carsten regarding the changes
>>>         necessary for [1] I can now also imagine to only define the
>>>         classes of
>>>         the core and client modules as part of Hono's Public API.
>>>
>>>         Dejan had already raised some concerns regarding the impact it would
>>>         have on our ability to quickly evolve, if we declared too much
>>>         of our
>>>         code as part of the public API. I now see his point more clearly
>>>         as it
>>>         would basically prevent us from making any reasonably complex
>>>         changes to
>>>         any of our adapters without creating a new major release, which is
>>>         probably not what we want. Most of our adapters heavily depend on
>>>         classes in the service-base module so in order to make any
>>>         substantial
>>>         progress we will need to change many of the classes in there.
>>>
>>>         In the past we had encouraged people to create custom protocol
>>>         adapters
>>>         by means of extending some of the base classes in service-base.
>>>         However,
>>>         in reality it seems more practical to use the approach outlined
>>>         in [2]
>>>         in order to connect devices using a proprietary protocol to a Hono
>>>         system. Note that this approach does not require implementing a full
>>>         fledged custom protocol adapter.
>>>
>>>         I would therefore propose to also exclude the service-base
>>>         module from
>>>         Hono's public API. People can still use it if they want to
>>>         implement a
>>>         custom adapter but they should be aware that we might change the
>>>         code at
>>>         any time.
>>>
>>>         WDYT?
>>>
>>>         [1] https://github.com/eclipse/hono/issues/1328
>>>         [2] https://github.com/eclipse/hono/issues/1478
>>>
>>>         Kai
>>>
>>>         On 15.01.20 14:22, Hudalla Kai (INST/ECS4) wrote:
>>>         > On 15.01.20 12:56, Dejan Bosanac wrote:
>>>         >> Hi Kai,
>>>         >>
>>>         >> this seems reasonable to me. Just one thing, when you say
>>>         "all classes",
>>>         >> do you mean public methods signatures by that or something else?
>>>         >>
>>>         >
>>>         > Good point. I would say that this affects all public classes
>>>         in the
>>>         > "public" packages which are currently
>>>         >
>>>         > core: all packages
>>>         >
>>>         > client: all packages
>>>         >
>>>         > service-base: all packages
>>>         >
>>>         > Does that make sense?
>>>         >
>>>         >> On Tue, Jan 14, 2020 at 8:52 AM Hudalla Kai (INST/ECS4)
>>>         >> <Kai.Hudalla@xxxxxxxx <mailto:Kai.Hudalla@xxxxxxxx>
>>>         <mailto:Kai.Hudalla@xxxxxxxx <mailto:Kai.Hudalla@xxxxxxxx>>> wrote:
>>>         >>
>>>         >>     Hi list,
>>>         >>
>>>         >>     with Hono 1.0.0 having been released last year, we now
>>>         need to follow
>>>         >>     semantic versioning for its public API. So far so good.
>>>         During the past
>>>         >>     weeks while implementing new features, we already ran in
>>>         to situations
>>>         >>     where some refactoring would have been beneficial but
>>>         where we had to
>>>         >>     think twice about whether we can simply change a method's
>>>         signature or
>>>         >>     remove some obsolete class(es). I think we can all agree
>>>         that this
>>>         >>     depends on whether the affected artifacts are to be
>>>         considered part of
>>>         >>     Hono's public API or not.
>>>         >>
>>>         >>     However, we haven't yet defined which parts of Hono
>>>         actually constitute
>>>         >>     its public API. Thus, I would like to propose a draft of
>>>         what I would
>>>         >>     consider (or like to see as) part of Hono's public API:
>>>         >>
>>>         >>     1) All remote APIs documented under [1]
>>>         >>     2) All classes in the core module
>>>         >>     3) All classes in the client module
>>>         >>     4) All classes in the service-base module
>>>         >>
>>>         >>     IMHO the rest would then automatically not be public API
>>>         and would thus
>>>         >>     not be subject to semantic versioning.
>>>         >>
>>>         >>     WDYT?
>>>         >>
>>>         >>     [1] https://www.eclipse.org/hono/docs/api/
>>>         >>
>>>         >>     --
>>>         >>     Mit freundlichen Grüßen / Best regards
>>>         >>
>>>         >>     Kai Hudalla
>>>         >>
>>>         >>     Software Developer - Bosch IoT Hub
>>>         >>
>>>         >>     Bosch.IO GmbH
>>>         >>     Ullsteinstr. 128
>>>         >>     12109 Berlin
>>>         >>     GERMANY
>>>         >>     www.bosch.io <http://www.bosch.io> <http://www.bosch.io>
>>>         >>
>>>         >>     Registered Office: Berlin, Registration Court: Amtsgericht
>>>         >>     Charlottenburg; HRB 148411 B
>>>         >>     Chairman of the Supervisory Board: Dr.-Ing. Thorsten Lücke;
>>>         >>     Managing Directors: Dr. Stefan Ferber, Dr. Aleksandar
>>>         Mitrovic, Yvonne
>>>         >>     Reckling
>>>         >>     _______________________________________________
>>>         >>     hono-dev mailing list
>>>         >>     hono-dev@xxxxxxxxxxx <mailto:hono-dev@xxxxxxxxxxx>
>>>         <mailto:hono-dev@xxxxxxxxxxx <mailto:hono-dev@xxxxxxxxxxx>>
>>>         >>     To change your delivery options, retrieve your password, or
>>>         >>     unsubscribe from this list, visit
>>>         >>     https://www.eclipse.org/mailman/listinfo/hono-dev
>>>         >>
>>>         >>
>>>         >>
>>>         >> --
>>>         >> Regards
>>>         >> --
>>>         >> Dejan Bosanac
>>>         >> http://sensatic.net/about
>>>         >>
>>>         >> _______________________________________________
>>>         >> hono-dev mailing list
>>>         >> hono-dev@xxxxxxxxxxx <mailto:hono-dev@xxxxxxxxxxx>
>>>         >> To change your delivery options, retrieve your password, or
>>>         unsubscribe from this list, visit
>>>         >> https://www.eclipse.org/mailman/listinfo/hono-dev
>>>         >>
>>>         >
>>>
>>>         --
>>>         Mit freundlichen Grüßen / Best regards
>>>
>>>         Kai Hudalla
>>>
>>>         Software Developer - Bosch IoT Hub
>>>
>>>         Bosch.IO GmbH
>>>         Ullsteinstr. 128
>>>         12109 Berlin
>>>         GERMANY
>>>         www.bosch.io <http://www.bosch.io>
>>>
>>>         Registered Office: Berlin, Registration Court: Amtsgericht
>>>         Charlottenburg; HRB 148411 B
>>>         Chairman of the Supervisory Board: Dr.-Ing. Thorsten Lücke;
>>>         Managing Directors: Dr. Stefan Ferber, Dr. Aleksandar Mitrovic,
>>>         Yvonne
>>>         Reckling
>>>         _______________________________________________
>>>         hono-dev mailing list
>>>         hono-dev@xxxxxxxxxxx <mailto:hono-dev@xxxxxxxxxxx>
>>>         To change your delivery options, retrieve your password, or
>>>         unsubscribe
>>>         from this list, visit
>>>         https://www.eclipse.org/mailman/listinfo/hono-dev
>>>         _______________________________________________
>>>         hono-dev mailing list
>>>         hono-dev@xxxxxxxxxxx <mailto:hono-dev@xxxxxxxxxxx>
>>>         To change your delivery options, retrieve your password, or
>>>         unsubscribe from this list, visit
>>>         https://www.eclipse.org/mailman/listinfo/hono-dev
>>>
>>>
>>>
>>>     --
>>>     Regards
>>>     --
>>>     Dejan Bosanac
>>>     http://sensatic.net/about
>>>     _______________________________________________
>>>     hono-dev mailing list
>>>     hono-dev@xxxxxxxxxxx <mailto:hono-dev@xxxxxxxxxxx>
>>>     To change your delivery options, retrieve your password, or
>>>     unsubscribe from this list, visit
>>>     https://www.eclipse.org/mailman/listinfo/hono-dev
>>>
>>>
>>>
>>> --
>>> Jens Reimann
>>> Principal Software Engineer / EMEA ENG Middleware
>>> Werner-von-Siemens-Ring 14
>>> 85630 Grasbrunn
>>> Germany
>>> phone: +49 89 2050 71286
>>>
>> ______________________________________________________________________
>> _______
>>>
>>> Red Hat GmbH, www.de.redhat.com <http://www.de.redhat.com>,
>>> Registered seat: Grasbrunn, Commercial register: Amtsgericht Muenchen,
>>> HRB 153243,
>>> Managing Directors: Charles Cachera, Laurie Krebs, Michael O'Neill,
>>> Thomas Savage
>>>
>>> _______________________________________________
>>> hono-dev mailing list
>>> hono-dev@xxxxxxxxxxx
>>> To change your delivery options, retrieve your password, or unsubscribe from
>> this list, visit
>>> https://www.eclipse.org/mailman/listinfo/hono-dev
>>>
>>
>> --
>> Mit freundlichen Grüßen / Best regards
>>
>> Kai Hudalla
>>
>> Software Developer - Bosch IoT Hub
>>
>> Bosch.IO GmbH
>> Ullsteinstr. 128
>> 12109 Berlin
>> GERMANY
>> www.bosch.io
>>
>> Registered Office: Berlin, Registration Court: Amtsgericht
>> Charlottenburg; HRB 148411 B
>> Chairman of the Supervisory Board: Dr.-Ing. Thorsten Lücke;
>> Managing Directors: Dr. Stefan Ferber, Dr. Aleksandar Mitrovic, Yvonne
>> Reckling
>> _______________________________________________
>> hono-dev mailing list
>> hono-dev@xxxxxxxxxxx
>> To change your delivery options, retrieve your password, or unsubscribe from this
>> list, visit
>> https://www.eclipse.org/mailman/listinfo/hono-dev
> 
> Best regards
> 
> Carsten Lohmann
> 
> Bosch IoT Hub - Product Area IoT Platform (IOC/PAP-HU) 
> Bosch.IO GmbH | Ullsteinstr. 128 | 12109 Berlin | GERMANY | www.bosch.io
> 
> Sitz: Berlin, Registergericht: Amtsgericht Charlottenburg; HRB 148411 B 
> Aufsichtsratsvorsitzender: Dr.-Ing. Thorsten Lücke; Geschäftsführung: Dr. Stefan Ferber, Dr. Aleksandar Mitrovic, Yvonne Reckling 
> 
> _______________________________________________
> hono-dev mailing list
> hono-dev@xxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe from this list, visit
> https://www.eclipse.org/mailman/listinfo/hono-dev
> 

-- 
Mit freundlichen Grüßen / Best regards

Kai Hudalla

Software Developer - Bosch IoT Hub

Bosch.IO GmbH
Ullsteinstr. 128
12109 Berlin
GERMANY
www.bosch.io

Registered Office: Berlin, Registration Court: Amtsgericht
Charlottenburg; HRB 148411 B
Chairman of the Supervisory Board: Dr.-Ing. Thorsten Lücke;
Managing Directors: Dr. Stefan Ferber, Dr. Aleksandar Mitrovic, Yvonne
Reckling

Back to the top