►
From YouTube: Magento Architectural Discussion -- July, 25, 2018
Description
Topics:
- Allowed HTTP methods for Actions (Oleksandr Gorkun)
- GraphQL schema for checkout (Alex Paliarush)
Meeting minutes: https://github.com/magento/architecture/wiki/July,-25,-2018
A
Okay,
so
this
is
a
architectural
discussions
meeting
and
let
me
just
start
from
introduction
of
some
new
process
that
we
have
right
now.
So,
first
of
all,
we
have
a
general
contextual
repository
and
main
purpose
of
this
repository.
There
are
two
purposes:
one
is
to
involve
community
entities
into
our
discussions,
so
we
make
the
decision
based
not
only
on
our
internal
understanding
of
the
magenta
and
its
usage,
but
also
on
the
community,
and
the
second
important
purpose
is
to
to
have
the
history
over
our
decision-making.
A
A
A
A
A
A
B
B
B
Another
reason
is
because
actually,
when
someone
writes
the
controller's,
they
do
have
some
certain
particular
method
in
mind,
but
it
just
so
happens
is
that
we
don't
have
a
declarative
way
to
stage
them.
I
I'm,
not
entirely
sure,
but
I
think
it's
a
legacy
of
some
framework
one
and
it's
not
really
intentional.
B
So
I
supposed
to
do
this.
Like
this,
we
create
child
interface
of
action
interface,
which
will
have
a
single
method
which
will
return,
allow
it
of
tgpd
methods
run
in
front
controller.
We
simply
check
if
much
power
attraction
in
currencies
interface.
If
it
does,
we
compare
coolant,
HTTP
method,
and
if
it's
not
in
the
list
of
cloud,
we
show
page
not
found
page
also,
it
is
really
important
to
try
to
cover
existing
controllers.
B
If
you
already
have
I
propose
to
do
this
by
making
some
sort
of
lager
that
each
time
when
an
action
is
dispatched,
you
will
look.
We
which
much
TDP
method
is
used
for
that
and
then
run
just
the
whole
suit
of
functional
tests
and
based
based
on
the
information
that
we
would
receive
just
automatically
implementation
of
HTTP
error
action
interface
towards
the
controls
that
we
have
information
on
I
know
it
won't
cover
all
actions,
but
it's
something
I
think
it'll
be
enough.
B
There
are
some
concerns
about
this
proposal.
Already
granular
man
thinks
we
should
follow
HTTP
standard
and
return
405
code,
when
not
allowed
method
is
used.
My
reasoning
behind
for
using
400
page
his
consistency
like
when
we
in
Web
API,
we
actually
return
404
when
they
can't
find
a
URL
for
contested
by
method.
Also
before
before
this,
when
purchased
Kim
moon
was
fixed
in
similar
box,
it
would
also
return
for
a
whole
page.
B
B
The
spot,
HTTP
methods
is
not
that
declarative
that
we
should
use
marker
interfaces
instead,
but
I
think
that's
not
a
good
over
year,
because
there
are
a
lot
of
treatment
methods
exist,
then,
maybe
for
some
reason:
community
you
need
some
custom
method
and
you
don't.
We
wouldn't
have
an
interface
for
that
and
we
have
to
create
like
10
marker
interfaces,
instead
of
one
musician
go
method.
B
But
currently
we
expect
multiple
router
implementations
to
be
active.
I
seen
that
it's
more
secure
to
be
validated
RDP
method
when
we
have
already
action
matched
because
otherwise
we'd
have
to
put
the
same
validations
to
each
router
or
create
a
plug-in
that's
executed
after
the
router
as
much
or
something
like
that.
C
D
Okay,
yes,
so
let
me
clarify,
but
so
I
think
in
this
specific
situation
we
should
not.
There
is
a
set
of
statistics
that
will
bring
us
to
the
right
solution.
Well,
just
follow
some
checkboxes
of
being
integer,
so
either
the
type
of
even
method,
request
methods
I
metadata
for
for
for
an
action
if
the
inherent
property
of
a
match.
D
B
B
D
Talking
about,
yes,
can
be
action
that
can
process
two
requests,
but
it's
metadata.
It's
an
inherent
property
that
is
defined
when
action
is
created.
It's
not
defined
dynamically,
so
I
estimate
the
probability
of
such
actions
to
ever
appear
and
such
least
valid
need
for
such
dynamic
behavior
of
defining
what
actions
and
what
methods
and
action
can
process
in
run
time
is
diminished.
Probability
is
very
low,
so
from
that
perspective
we
can
say
that
this
property
of
request
myself
an
action,
is
started,
so
it
means.
If
we
have
a
word
static.
D
We
can
already
say
that
any
language
construct
that
introduces
behavior
is
probably
not
a
correct
approach,
so
we
can
say,
if
probably
for
wrong
instrument,
adding
a
method
implementation
that
will
give
you
a
list
of
actions
is
probably
not
the
best,
not
the
optimal
approach.
It
don't
be
that
we
do
it's
not
dynamic.
We
don't
want
to
be
dynamically.
We
wanted
to
be
study,
wanted
to
be
defined
and
described.
That
moment
on
the
action
is
great.
So
now
what
so?
D
That
I
just
follow
the
simple
logic,
but
from
that
perspective,
I,
don't
like
the
idea
of
using
method
here
right.
So
what
the
ways
of
describing
action,
metadata
action,
metadata,
statically
the
way
we
can
do
some
configuration,
it
would
be
overkill.
We
can
do
annotation,
but,
as
alexander
mentioned
correctly,
we
don't
use
annotations
here
last.
Why
why
I
have
annotations?
And
we
also
have
we
have
you
son
started
or
we
can
use
marker.
D
From
perspective
of
so
I
choose
here
between
effectively
between
static
variable,
a
constant
that
will
contain
list
of
methods
and
market
indices,
I
choose
personally
I,
don't
have
strong
opinions,
but
I
choose
percentage
mark
interfaces
because
an
action,
a
type
of
action
like
that,
a
method
that
is
result
by
action
is
the
inherent
property
of
energy.
It's
a
part
of
type
of
action
and,
if
I
here
worth
type
I
prefer
to
use
interface
to
mark
that
problem.
B
D
D
Compare
comparison
is
actually
processing
them
differently.
If,
ideally,
they
would
have
different
if
you
would
follow
HTTP
stand
up
in
design
of
our
actions,
which
would
be
extremely
breaking
change
for
now
and
not
needed,
because
since
we
are
moving
towards
web
it
yet,
but
if
he
followed
HDTV
standard
our
actions
that
process
different
HTTP
methods
would
have
different
signatures
in
their
execute
method,
because
HTTP
dictates
what
actions
can
have,
but
across
body.
What
can't
have
what
actions
can
tell
request
by
the
dictates
of
what
types
of
responses
they
can
return?
D
So
if
he
would
go
further
I'm
just
except
fellating,
we
would
have
them
absolutely
different
types
of
actions.
So
that's
why
that,
in
terms,
the
market
interfaces
is
a
small
step
in
that
direction.
But
it
looks,
looks
like
the
correct,
let's
type,
the
correct,
directing
direction,
but
not
too
big
and
not
too
great.
F
D
B
D
We
will
not
be
have
the
school,
because
our
validation
will
always
depend
on
this
request.
Type.
Every
request
will
have
a
method
right,
so
in
your
front
controller
or
outer
than
whatever
you
decide
to
implement
this,
you
will
have
a
method
right
in
your
request
and
you
will
get
the
method
from
from
your
request
right.
So,
for
example,
you
will
get
have
some
code,
like
request,
get
messy
and
you
will,
depending
on
you'll.
D
D
B
B
C
B
A
B
Just
use
invalid
URL
and
come
for
election
that
actually
exists,
but
it's
not
processing
get.
Oh.
C
A
B
A
H
I
This
there
is
actually
exist.
One
more
option
is
just
a
our
wrote
in
dispatch
system
and
provide
some
mechanism
just
to
place
an
action
file
next
in
class
and
some
particular
braised
pleasure
to
declare
what
HTTP
method
should
be.
So
we
now
just
the
class
name
to
two
zeros,
and
then
we
we
may
have
compose
some
folders
subfolders
to
declare
a
cheeky
PMS,
but
just
like.
A
A
A
F
This
in
the
big
guy
is
the
difference
is
that
you
have
same
URL,
but
you
can
have
some
methods
implemented.
Some
others
not
implemented,
and
this
were
like
different
routes-
are
identified
by
a
combination
of
HTTP
method,
plus
route,
and
here,
as
far
as
I
understand,
you
will
have
like
actioncontroller
URL,
which
is
unique
for
specific
actions
and
usually
you're
not
supposed
to
have
same
URL
for
different
actions.
I
J
H
A
A
H
B
F
F
And
after
we
get
some
clarification
and
like
most
opinions
expressed
on
this
topic,
we
will
be
able
to
work
on
specific
schema
for
all
these
queries
and
meditations.
So,
first
of
all,
I'm
sorry
focus
on
this
one.
So,
first
of
all,
we'd
like
to
have
separate
mutations.
So
for
somebody
who
doesn't
know
like
what
mutation
is
it's
like
command
in
Rafael,
so
anything
that
doesn't
meet
a
state
is
query
in
growth,
kill
anything
that
modify
state
is
mutation.
So,
let's
say
adding
products
to
cart
or
certain
ship
mass
of
each
mutation,
getting
current
information.
F
It's
a
query,
so
we
would
like
to
have
separate
mutations
for
each
product
type,
and
this
will
be
used
while
adding
items
to
the
cart.
Let's
say
if
you
consider
product
query
endpoint
over
there
we
had
single
interface
like
product
interface
and
it
had
multiple
implementations,
posit
interface
for
different
product
types.
However,
graph
kyo
doesn't
support
polymorphism
and
interfaces
for
cases
when
you
accept
it
like
as
argument
for
mutation,
for
example,
so
girl
kyo
differentiates
the
different
types
like
regular
types
and
input
types.
So
for
input
types,
you
cannot
respond
morphism
and
so
far.
F
F
If
you
separate
this,
we
can
create
nice
strict
types
and
you
will
get
autocomplete
and
why
is
all
see
why
we
believe
this
is
a
good
idea,
because
if
we
look
at
pwe
scenario,
you
will
be
making
this
add
item
to
cart
from
usually
like
from
for
details,
page
and
the
product
of
space.
You
know
the
type
of
product
you
are
currently
viewing,
and
it
means
that
you
can
trade
some
map
on
JavaScript
and
basically
to
to
say
if
my
product
type
control
type
is
configurable,
I
will
use.
F
F
Okay,
so
the
next
point
is
that
we
want
to
have
uniform
end
points
for
guests
and
customers.
This
is
just
for
convenience
and
right
now,
customers
and
gas
are
differentiated
by
presence
or
absence
of
authorization
header
and
basically,
if
you
have
valued
customer
token
specified
header,
then
you
know
the
business
customer.
F
Otherwise
we
assume
that
the
user
is
guest
and
we
believe
it
should
be
possible
to
unify
these
interfaces.
It
will
be
just
easier
for
everybody
and
we
will
not
have
like
special
endpoints
for
customer
special
on
points
for
guests,
like
you
have
in
the
rest
implementation,
so
you
will
be
able
to
use
some
types
so.
D
So
framework
you
mean
that
framework
well,
based
on
television
talking
define
if
a
customer
is
logged
in
an
envelope
in,
but
if
the
actual
service
contracts
or
points
operation
that
are
executed
and
that
octopus,
we
are
required
to
execute
our
Coulter
disputed
action
are
different.
The
framework
should
be
able
to
identify
to
differentiate
different
actions
for
single
graphic,
an
endpoint
right,
yeah.
F
Yeah
so
we
already
have
example,
the
simplest
step
here
was
to
implement
like
create
empty
card,
a
mutation
and
I
believe
it
was
already
implemented
by
some
community
member
and
what
we
do.
We
just
look
at
user
context.
The
user
context
is
identified
same
way
as
it's
done
in
rest.
We
just
look
at
header
and
we
initialize
user
context
and
then
from
user
context.
F
F
D
F
I
was
going
to
do
that
soon,
but
first
I
wanted
to
write
like
initial
version
of
schema,
like
proposed
schema
and
for
crazy,
quick
to
create
the
schema.
We
need
to
get
answers
for
these
items
and,
if
you
have
like,
if
somebody
notices
that
there
is
something
wrong,
it's
better
to
give
back
now
before
we
spent
all
the
family,
like
did
great,
entails
for
the
schema
for.
D
E
F
Couple
days,
so
the
next
point
is
that
we
want
to
create
separate
mutations
for
each
concept.
So
alternative
is
to
create
one
huge
mutation,
these
lot
of
optional
fields,
and
then,
let's
say,
if
you
provide
shipping
information,
we
will
save
it.
If
you
provide
like
a
payment
message,
we
will
say
that
if
you
don't
try
it,
you
will
not
save
it,
but
this
is
this
seems
to
be
like
really
complicated
and
most
likely
in
in
in
the
most
scenarios.
F
F
At
the
same
time,
graph
Keo
allows
to
combine
several
mutations
in
one
query.
Basically,
so
you
can
send
just
one
query
to
Magento
and
all
the
mutations
which
you
specify
will
be
executed
in
sequence.
In
case
of
graphical
queries,
it
will
be
in
parallel
in
quest
in
case
of
graphical
mutations,
in
sequence,
to
prevent
rest
conditions
between
your
mutations
and
that's.
Why
it
should
be
possible
threat
to
create
empty
cart
and
then
send
all
the
data
still
in
one
graph
kill
query,
so
it
should
work
and
at
the
same
time
we
wished.
F
You
can
create
new
and
point
find
like
sometime
in
the
future.
We
can
create
and
want
to
create
order
in
one
hope,
if
you
decide
that
we
want
that,
we
can
do
that,
but
so
far
for
regular
checkout
flow.
We
believe
that
it's
better
to
to
separate
the
steps
and
it
will
import
granularity
and
if
you
also
make
every
step
cleaner
and
interface,
will
be
more
usable
and
friendly.
F
So
and
the
main
reasons
are
like
first
of
all,
use
cases
usually
have
like
different
steps.
You
know
don't
normally
create
carved
and
populated
in
one
request,
because
let's
say
to
get
valid
shipment
options,
you
need
to
populate
like
your
address
and
items
and
and
basically
initially,
if
anybody
doing
that,
but
it
should
be
possible
if
you
know
exactly
what
your
shipment
options,
correct
options
are,
etc.
F
K
D
D
K
D
I
want
to
emphasize
that
the
design
guideline
that
was
added
our
technical
guidelines.
It
was
specifically
added
there
because
it
you
know
we
did
a
mistake
in
the
past,
where
we
didn't
take
into
account
when
we
designed
api's
for
the
scenario
that
being
very
efficient
for
us.
In
that
current
moment,
right.
L
D
In
future,
the
future
cases
eight
guys
can
be
used
by
our
agent
by
our
developers
in
the
way
that
we're
see
now,
that's
why
they
have
to
be
implemented
in
a
way
that
will
support
a
performant
performant,
multiple
actions,
including
customization.
So,
for
example,
if
you
add
thousand
products
to
cart,
you
don't.
E
D
Don't
dispatch
a
thousand
item
item
at
the
Picard
events,
you
dispatch
a
single
event,
items
added
to
part:
that's
just
I'm,
just
reminding
you
why
we
why
we
that
design
got
out
there
and
if
we
have
the
design
government,
if
it's
published,
we
cannot
just
go
in
a
single
in
the
single
design,
decide
that
we
don't
follow
it.
If
we.
D
He's
saying
that
it
doesn't
make
sense,
we
first
have
to
go
and
change
our
Constitution
our
technical
guidelines,
and
then
we
can
change
the
true
and
not
apply
the
tool
on
some
specific
design,
I,
just
reminding
you
that
the
process,
how
it
supports
the
work
you
cannot
ignore.
What's
written
in
technical
guidance,
I'm,
not
saying
that
your
knowing
is
here,
but
please
don't
forget
the
future.
Okay.
K
Okay,
so
maybe
we
have
to
take
a
look
at
it
shows
it's
everything
really
government
is
right
now,
by
the
way
about
capitation
for
cards
may
violate
graphically
restriction,
which
says
it's.
We
cannot
use
interfaces
for
input
types
so
right
now,
as
this
design
proposed
us
to
use
a
different
types
for
each
type
of
product.
If
we
want
to
support
bulk
operation
for
add
to
cart'
operation
because
of
graphic
a
limitation,
we
don't
have
to
use
the
same
type
for
all
product
types.
This
is
my
concern.
F
So
if
you
do
it
like
in
current
design
and
make
different
in
point,
so
we
can
potential
except
like
in
this
version.
It
is
like
accepting
a
single
item,
except
for
group
like
it
was.
The
idea
was
to
have
multiple
items
accepted
for
group
products,
but
for
everything
else,
just
single
item,
but
we
can.
We
can
do
it
like
multiple
items
for
specific
product
type
in
one
request
and
then
you
can
have.
You
will
have
to
split.
Basically
in
your
in
your
client
side,
you
will
have
to
split
it
like
what
say.
F
Five
simple
products
will
be
in
one
request
and
then
five
configurable
in
another
request,
and
it
will
be
like
single
graph
kill
request,
but
on
the
server
side
it
will
be
different
resolvers
which
will
causes
those,
and
my
concern
is
that
you
don't
be
able
to
have
like
single
single
event
in
this
case.
Like
Anton.
Does
it
make
sense
to
have
it
included,
as
it
make
sense
to
have
same
event
like
single
event
for
all
product
types,
I.
D
F
Right
and
one
more
item
is
that
we
need
we
plan
to
have
hashed
IDs
for
cards
and
third
items
and
all
those
card
related
operations.
If
you
remember
how
it
is
done
in
rest
right
now,
if
you
are
customer,
then
your
ID
is
just
regular
ID
from
database.
It's
not
hash
to
anything.
If
you
are
guests,
you
have
cached
version
of
that
ID,
which
is
preventing
just
guessing
ideas
of
different
customers,
and
here
we
would
like
to
have
probably
unified
approach,
and
we
would
like
to
have
hashes
for
customers
as
well,
like
any
concerns
with.